diff --git a/src/storage/tablet/ob_tablet_mds_data.cpp b/src/storage/tablet/ob_tablet_mds_data.cpp index b4dd6c69e1..7da4acc8e8 100644 --- a/src/storage/tablet/ob_tablet_mds_data.cpp +++ b/src/storage/tablet/ob_tablet_mds_data.cpp @@ -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); diff --git a/unittest/storage/test_tablet_dumped_medium_info.cpp b/unittest/storage/test_tablet_dumped_medium_info.cpp index 042346fabc..4bbb68d487 100644 --- a/unittest/storage/test_tablet_dumped_medium_info.cpp +++ b/unittest/storage/test_tablet_dumped_medium_info.cpp @@ -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 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 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 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