fix major_freeze bug of checking progress
This commit is contained in:
		| @ -578,9 +578,13 @@ int ObMajorMergeScheduler::update_merge_status(const int64_t expected_epoch) | ||||
|             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; | ||||
|             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)); | ||||
|           } else { | ||||
|             // TODO 'zone merge finish' & 'zone all tablet merge finish' should be handled in same procedure. | ||||
|  | ||||
| @ -372,8 +372,7 @@ int ObZoneMergeManagerBase::finish_zone_merge( | ||||
|  | ||||
|   if (OB_FAIL(check_valid(zone, idx))) { | ||||
|     LOG_WARN("fail to check valid", KR(ret), K(zone), K_(tenant_id)); | ||||
|   } else if ((last_merged_scn <= 0) || (all_merged_scn <= 0) | ||||
|              || (all_merged_scn > last_merged_scn)) { | ||||
|   } else if ((last_merged_scn <= 0) || (all_merged_scn <= 0)) { | ||||
|     ret = OB_INVALID_ARGUMENT; | ||||
|     LOG_WARN("invalid argument", KR(ret), K(zone), K_(tenant_id), | ||||
|              K(last_merged_scn), K(all_merged_scn)); | ||||
| @ -393,7 +392,7 @@ int ObZoneMergeManagerBase::finish_zone_merge( | ||||
|     } else { | ||||
|       ObZoneMergeInfo::MergeStatus status = static_cast<ObZoneMergeInfo::MergeStatus>( | ||||
|         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; | ||||
|         tmp_info.is_merging_.set_val(is_merging, true); | ||||
|         tmp_info.last_merged_scn_.set_val(last_merged_scn, true); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 obdev
					obdev