fix major_freeze bug of checking progress

This commit is contained in:
obdev
2022-11-06 02:08:01 +00:00
committed by wangzelin.wzl
parent f13a795692
commit eca3fdcf27
2 changed files with 8 additions and 5 deletions

View File

@ -578,9 +578,13 @@ int ObMajorMergeScheduler::update_merge_status(const int64_t expected_epoch)
cur_all_merged_scn = progress->smallest_snapshot_version_; cur_all_merged_scn = progress->smallest_snapshot_version_;
} }
if ((last_merged_scn < cur_all_merged_scn) || (ori_all_merged_scn > cur_all_merged_scn)) { // cur_all_merged_scn >= last_merged_scn
// 1. Equal: snapshot_version of all tablets change to frozen_scn after major compaction
// 2. Greater: In backup-restore situation, tablets may have higher snapshot_version, which
// is larger than current frozen_scn. https://work.aone.alibaba-inc.com/issue/45933591
if ((cur_all_merged_scn < last_merged_scn) || (ori_all_merged_scn > cur_all_merged_scn)) {
ret = OB_ERR_UNEXPECTED; ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpect version", KR(ret), K(last_merged_scn), K(cur_all_merged_scn), LOG_ERROR("unexpect merge scn", KR(ret), K(last_merged_scn), K(cur_all_merged_scn),
K(ori_all_merged_scn)); K(ori_all_merged_scn));
} else { } else {
// TODO 'zone merge finish' & 'zone all tablet merge finish' should be handled in same procedure. // TODO 'zone merge finish' & 'zone all tablet merge finish' should be handled in same procedure.

View File

@ -372,8 +372,7 @@ int ObZoneMergeManagerBase::finish_zone_merge(
if (OB_FAIL(check_valid(zone, idx))) { if (OB_FAIL(check_valid(zone, idx))) {
LOG_WARN("fail to check valid", KR(ret), K(zone), K_(tenant_id)); LOG_WARN("fail to check valid", KR(ret), K(zone), K_(tenant_id));
} else if ((last_merged_scn <= 0) || (all_merged_scn <= 0) } else if ((last_merged_scn <= 0) || (all_merged_scn <= 0)) {
|| (all_merged_scn > last_merged_scn)) {
ret = OB_INVALID_ARGUMENT; ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), K(zone), K_(tenant_id), LOG_WARN("invalid argument", KR(ret), K(zone), K_(tenant_id),
K(last_merged_scn), K(all_merged_scn)); K(last_merged_scn), K(all_merged_scn));
@ -393,7 +392,7 @@ int ObZoneMergeManagerBase::finish_zone_merge(
} else { } else {
ObZoneMergeInfo::MergeStatus status = static_cast<ObZoneMergeInfo::MergeStatus>( ObZoneMergeInfo::MergeStatus status = static_cast<ObZoneMergeInfo::MergeStatus>(
zone_merge_infos_[idx].merge_status_.value_); zone_merge_infos_[idx].merge_status_.value_);
if (last_merged_scn != zone_merge_infos_[idx].last_merged_scn_) { if (last_merged_scn > zone_merge_infos_[idx].last_merged_scn_) {
const int64_t is_merging = 0; const int64_t is_merging = 0;
tmp_info.is_merging_.set_val(is_merging, true); tmp_info.is_merging_.set_val(is_merging, true);
tmp_info.last_merged_scn_.set_val(last_merged_scn, true); tmp_info.last_merged_scn_.set_val(last_merged_scn, true);