keep medium info previous filter logic

This commit is contained in:
hiddenbomb
2023-07-07 06:48:10 +00:00
committed by ob-robot
parent 11dd9a93cf
commit 902d0fe5a6
2 changed files with 48 additions and 8 deletions

View File

@ -541,8 +541,6 @@ int ObTabletMdsData::init_medium_info_list(
extra_medium_info_.reset();
} else if (OB_FAIL(copy_medium_info_list(finish_medium_scn, *old_medium_info_list, *cur_medium_info_list))) {
LOG_WARN("failed to copy medium info list", K(ret), K(finish_medium_scn), KPC(old_medium_info_list));
} else if (OB_FAIL(check_medium_info_continuity(*cur_medium_info_list))) {
LOG_WARN("failed to check medium info cotinuity", K(ret));
} else if (is_major_merge_type(merge_type)) {
extra_medium_info_.last_compaction_type_ = is_major_merge(merge_type) ? compaction::ObMediumCompactionInfo::MAJOR_COMPACTION : compaction::ObMediumCompactionInfo::MEDIUM_COMPACTION;
extra_medium_info_.last_medium_scn_ = finish_medium_scn;
@ -583,7 +581,7 @@ int ObTabletMdsData::init_medium_info_list(
&& OB_FAIL(copy_medium_info_list(finish_medium_scn, full_memory_medium_info_list.medium_info_list_, *cur_medium_info_list))) {
LOG_WARN("failed to copy medium info", K(ret));
} else if (OB_FAIL(check_medium_info_continuity(*cur_medium_info_list))) {
LOG_WARN("failed to check medium info cotinuity", K(ret));
LOG_WARN("failed to check medium info continuity", K(ret), K(finish_medium_scn), KPC(cur_medium_info_list));
} else {
/*
* finish_medium_scn = last_major->get_snapshot_version()
@ -628,8 +626,6 @@ int ObTabletMdsData::init_with_update_medium_info(
LOG_WARN("failed to init medium info list", K(ret));
} else if (OB_FAIL(copy_medium_info_list(finish_medium_scn, *old_medium_info_list, *cur_medium_info_list))) {
LOG_WARN("failed to copy medium info", K(ret));
} else if (OB_FAIL(check_medium_info_continuity(*cur_medium_info_list))) {
LOG_WARN("failed to check medium info cotinuity", K(ret));
} else {
extra_medium_info_.last_compaction_type_ = old_extra_medium_info.last_compaction_type_;
extra_medium_info_.last_medium_scn_ = old_extra_medium_info.last_medium_scn_;
@ -660,6 +656,9 @@ int ObTabletMdsData::copy_medium_info_list(
} else if (input_medium_info->medium_snapshot_ <= finish_medium_scn) {
// medium snapshot no bigger than finish medium scn(which is from last major sstable),
// no need to copy it
} else if (input_medium_info->medium_snapshot_ <= medium_info_list.get_max_medium_snapshot()) {
// medium info no bigger than current max medium snapshot,
// no need to copy it
} else if (OB_FAIL(medium_info_list.append(*input_medium_info))) {
LOG_WARN("failed to append medium info", K(ret), K(i), KPC(input_medium_info));
}
@ -780,7 +779,9 @@ int ObTabletMdsData::check_medium_info_continuity(
LOG_WARN("medium info ist null", K(ret), K(i), KP(info));
} else if (OB_UNLIKELY(prev_medium_snapshot != info->last_medium_snapshot_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("medium info list is not continuous", K(ret), K(i), K(prev_medium_snapshot), KPC(info));
LOG_WARN("medium info list is not continuous", K(ret), K(i), K(prev_medium_snapshot),
"last_medium_snapshot", info->last_medium_snapshot_,
K(medium_info_list));
} else {
prev_medium_snapshot = info->medium_snapshot_;
}
@ -932,8 +933,6 @@ int ObTabletMdsData::fuse_mds_dump_node(
LOG_WARN("failed to copy base medium info list", K(ret));
} else if (OB_FAIL(copy_medium_info_list(finish_medium_scn, *mds_table_medium_info_list, *fused_medium_info_list))) {
LOG_WARN("failed to copy mds table medium info list", K(ret));
} else if (OB_FAIL(check_medium_info_continuity(*fused_medium_info_list))) {
LOG_WARN("failed to check medium info cotinuity", K(ret));
}
ObTabletMdsData::free_medium_info_list(allocator, base_medium_info_list);

View File

@ -296,6 +296,47 @@ TEST_F(TestTabletDumpedMediumInfo, standby_cluster)
ret = ObTabletMdsData::check_medium_info_continuity(result);
ASSERT_EQ(OB_SUCCESS, ret);
}
TEST_F(TestTabletDumpedMediumInfo, mds_table_dump)
{
int ret = OB_SUCCESS;
ObArenaAllocator allocator;
compaction::ObMediumCompactionInfo *info = nullptr;
ObTabletDumpedMediumInfo input_medium_info1;
ret = input_medium_info1.init(allocator);
ASSERT_EQ(OB_SUCCESS, ret);
ObTabletComplexAddr<ObTabletDumpedMediumInfo> mds_table_data;
mds_table_data.ptr_ = &input_medium_info1;
APPEND_MEDIUM_INFO(input_medium_info1, allocator, 7, 6, false, info);
APPEND_MEDIUM_INFO(input_medium_info1, allocator, 9, 7, false, info);
ObTabletDumpedMediumInfo input_medium_info2;
ret = input_medium_info2.init(allocator);
ASSERT_EQ(OB_SUCCESS, ret);
ObTabletComplexAddr<ObTabletDumpedMediumInfo> base_data;
base_data.ptr_ = &input_medium_info2;
APPEND_MEDIUM_INFO(input_medium_info2, allocator, 2, 1, false, info);
APPEND_MEDIUM_INFO(input_medium_info2, allocator, 4, 2, false, info);
APPEND_MEDIUM_INFO(input_medium_info2, allocator, 6, 4, false, info);
APPEND_MEDIUM_INFO(input_medium_info2, allocator, 7, 6, false, info);
ObTabletDumpedMediumInfo result;
ret = result.init(allocator);
ASSERT_EQ(OB_SUCCESS, ret);
ObTabletComplexAddr<ObTabletDumpedMediumInfo> result_data;
result_data.ptr_ = &result;
const int64_t finish_medium_scn = 4;
ret = ObTabletMdsData::fuse_mds_dump_node(allocator, finish_medium_scn, mds_table_data, base_data, result_data);
ASSERT_EQ(OB_SUCCESS, ret);
ASSERT_EQ(3, result.medium_info_list_.count());
ASSERT_EQ(6, result.medium_info_list_.at(0)->medium_snapshot_);
ASSERT_EQ(7, result.medium_info_list_.at(1)->medium_snapshot_);
ASSERT_EQ(9, result.medium_info_list_.at(2)->medium_snapshot_);
}
} // namespace unittest
} // namespace oceanbase