fix extra medium info fuse bug

This commit is contained in:
yangqise7en 2023-10-12 10:40:08 +00:00 committed by ob-robot
parent 9f814a2db7
commit ba235676b3
6 changed files with 17 additions and 21 deletions

View File

@ -118,7 +118,7 @@ public:
}
OB_INLINE int64_t get_group_idx_col_index() const
{
return (read_info_ != nullptr) ? read_info_->get_group_idx_col_index() : common::OB_INVALID_INDEX;
return (read_info_ != nullptr && read_info_ != rowkey_read_info_) ? read_info_->get_group_idx_col_index() : common::OB_INVALID_INDEX;
}
OB_INLINE bool need_fill_group_idx() const
{ return get_group_idx_col_index() != common::OB_INVALID_INDEX; }

View File

@ -18,23 +18,23 @@ namespace compaction
int ObMediumListChecker::validate_medium_info_list(
const ObExtraMediumInfo &extra_info,
const MediumInfoArray &medium_info_array,
const MediumInfoArray *medium_info_array,
const int64_t last_major_snapshot)
{
int ret = OB_SUCCESS;
int64_t next_medium_info_idx = 0;
if (OB_FAIL(check_extra_info(extra_info, last_major_snapshot))) {
LOG_WARN("failed to check extra info", KR(ret), K(last_major_snapshot), K(extra_info));
} else if (medium_info_array.empty()) {
} else if (nullptr == medium_info_array || medium_info_array->empty()) {
// do nothing
} else if (OB_FAIL(filter_finish_medium_info(medium_info_array, last_major_snapshot, next_medium_info_idx))) {
} else if (OB_FAIL(filter_finish_medium_info(*medium_info_array, last_major_snapshot, next_medium_info_idx))) {
LOG_WARN("failed to filter finish medium info", KR(ret), K(last_major_snapshot), K(next_medium_info_idx));
} else if (next_medium_info_idx >= medium_info_array.count()) {
} else if (next_medium_info_idx >= medium_info_array->count()) {
// do nothing
} else if (OB_FAIL(check_continue(medium_info_array, next_medium_info_idx))) {
LOG_WARN("failed to check medium list continue", KR(ret), K(last_major_snapshot), K(medium_info_array));
} else if (OB_FAIL(check_next_schedule_medium(medium_info_array.at(next_medium_info_idx), last_major_snapshot, false/*force_check*/))) {
LOG_WARN("failed to check next schedule medium info", KR(ret), K(last_major_snapshot), K(medium_info_array), K(next_medium_info_idx));
} else if (OB_FAIL(check_continue(*medium_info_array, next_medium_info_idx))) {
LOG_WARN("failed to check medium list continue", KR(ret), K(last_major_snapshot), KPC(medium_info_array));
} else if (OB_FAIL(check_next_schedule_medium(medium_info_array->at(next_medium_info_idx), last_major_snapshot, false/*force_check*/))) {
LOG_WARN("failed to check next schedule medium info", KR(ret), K(last_major_snapshot), KPC(medium_info_array), K(next_medium_info_idx));
}
return ret;
}

View File

@ -23,7 +23,7 @@ public:
typedef common::ObIArray<compaction::ObMediumCompactionInfo*> MediumInfoArray;
static int validate_medium_info_list(
const ObExtraMediumInfo &extra_info,
const MediumInfoArray &medium_info_array,
const MediumInfoArray *medium_info_array,
const int64_t last_major_snapshot);
static int check_continue(
const MediumInfoArray &medium_info_array,

View File

@ -4791,12 +4791,9 @@ int ObTablet::check_medium_list() const
const ObTabletDumpedMediumInfo *dumped_list = nullptr;
if (OB_FAIL(ObTabletMdsData::load_medium_info_list(arena_allocator, mds_data_.medium_info_list_, dumped_list))) {
LOG_WARN("failed to load medium info list", K(ret), K(ls_id), K(tablet_id), K(mds_data_));
} else if (nullptr == dumped_list) {
// do nothing
LOG_INFO("skip check medium list for empty dumped medium info list", KR(ret), K(ls_id), K(tablet_id));
} else if (OB_FAIL(ObMediumListChecker::validate_medium_info_list(
mds_data_.extra_medium_info_,
dumped_list->medium_info_list_,
nullptr == dumped_list ? nullptr : &dumped_list->medium_info_list_,
last_major->get_snapshot_version()))) {
LOG_WARN("fail to validate medium info list", K(ret), K(ls_id), K(tablet_id), K(mds_data_), KPC(dumped_list), KPC(last_major));
}
@ -5750,7 +5747,7 @@ int ObTablet::validate_medium_info_list(
} else if (OB_ISNULL(medium_info_list)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("medium info list is null", K(ret), K(ls_id), K(tablet_id), K(finish_medium_scn), KP(medium_info_list));
} else if (OB_FAIL(ObMediumListChecker::validate_medium_info_list(extra_info, medium_info_list->medium_info_list_, finish_medium_scn))) {
} else if (OB_FAIL(ObMediumListChecker::validate_medium_info_list(extra_info, &medium_info_list->medium_info_list_, finish_medium_scn))) {
LOG_WARN("failed to validate medium info list", KR(ret), K(ls_id), K(tablet_id), K(mds_data), K(finish_medium_scn));
}
return ret;

View File

@ -689,8 +689,7 @@ int ObTabletMdsData::init_single_complex_addr_and_extra_info(
}
if (OB_FAIL(ret)) {
} else if (nullptr == ptr
|| finish_medium_scn < src_addr_extra_info.last_medium_scn_
} else if (finish_medium_scn < src_addr_extra_info.last_medium_scn_
|| src_addr_extra_info.last_medium_scn_ < src_data_extra_info.last_medium_scn_) {
dst_extra_info.last_compaction_type_ = src_data_extra_info.last_compaction_type_;
dst_extra_info.last_medium_scn_ = src_data_extra_info.last_medium_scn_;

View File

@ -108,19 +108,19 @@ TEST_F(TestMediumListChecker, test_validate_medium_info_list)
ObSEArray<compaction::ObMediumCompactionInfo*, 10> array;
ASSERT_EQ(OB_SUCCESS, construct_array("300, 400, 500", array, 10/*last_medium_scn_of_first_medium_info*/));
ret = ObMediumListChecker::validate_medium_info_list(extra_info, array, 100/*last_major_snapshot*/);
ret = ObMediumListChecker::validate_medium_info_list(extra_info, &array, 100/*last_major_snapshot*/);
ASSERT_EQ(OB_ERR_UNEXPECTED, ret);
array.reset();
ASSERT_EQ(OB_SUCCESS, construct_array("200, 400, 500", array, 100/*last_medium_scn_of_first_medium_info*/));
ret = ObMediumListChecker::validate_medium_info_list(extra_info, array, 50/*last_major_snapshot*/);
ret = ObMediumListChecker::validate_medium_info_list(extra_info, &array, 50/*last_major_snapshot*/);
ASSERT_EQ(OB_ERR_UNEXPECTED, ret);
ret = ObMediumListChecker::validate_medium_info_list(extra_info, array, 100/*last_major_snapshot*/);
ret = ObMediumListChecker::validate_medium_info_list(extra_info, &array, 100/*last_major_snapshot*/);
ASSERT_EQ(OB_SUCCESS, ret);
extra_info.last_medium_scn_ = 1000;
ret = ObMediumListChecker::validate_medium_info_list(extra_info, array, 1000/*last_major_snapshot*/);
ret = ObMediumListChecker::validate_medium_info_list(extra_info, &array, 1000/*last_major_snapshot*/);
ASSERT_EQ(OB_SUCCESS, ret);
// push item without clear array