fix extra medium info fuse bug
This commit is contained in:
parent
9f814a2db7
commit
ba235676b3
@ -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; }
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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;
|
||||
|
@ -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_;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user