提交 3eef7b05 编写于 作者: O obdev 提交者: wangzelin.wzl

fix update_merge_status repeatedly report OB_INNER_STAT_ERROR when checksum_error exists

上级 31418623
......@@ -657,6 +657,8 @@ int ObMajorMergeScheduler::try_update_global_merged_scn(const int64_t expected_e
LOG_WARN("not inited", KR(ret));
} else if (OB_FAIL(zone_merge_mgr_->get_snapshot(global_info, infos))) {
LOG_WARN("fail to get zone info", KR(ret));
} else if (global_info.is_merge_error()) {
LOG_WARN("should not update global merged scn, cuz is_merge_error is true", K(global_info));
} else {
if (global_info.last_merged_scn_ != global_info.global_broadcast_scn_) {
bool merged = true;
......
......@@ -801,9 +801,12 @@ int ObZoneMergeManagerBase::update_global_merge_info_after_merge(const int64_t e
const uint64_t meta_tenant_id = gen_meta_tenant_id(tenant_id_);
if (OB_FAIL(check_inner_stat())) {
LOG_WARN("fail to check inner stat", KR(ret), K_(tenant_id));
} else if (global_merge_info_.is_in_verifying_status()) {
LOG_INFO("already in verifying status, no need to update global merge status again", K_(tenant_id),
"global merge status", global_merge_info_.merge_status_);
} else if (global_merge_info_.is_merge_error()) {
ret = OB_INNER_STAT_ERROR;
LOG_WARN("should not continue checking checksum, cuz is_merge_error is true", KR(ret), K_(global_merge_info));
LOG_WARN("should not update global merge status, cuz is_merge_error is true", KR(ret), K_(global_merge_info));
} else {
if (OB_FAIL(trans.start(proxy_, meta_tenant_id))) {
LOG_WARN("fail to start transaction", KR(ret), K_(tenant_id), K(meta_tenant_id));
......
......@@ -88,6 +88,7 @@ private:
const common::ObIArray<share::ObZoneMergeInfo> &ori_merge_infos,
const common::ObIArray<common::ObZone> &zone_list,
common::ObIArray<share::ObZoneMergeInfo> &to_insert_infos);
protected:
common::SpinRWLock lock_;
static int copy_infos(ObZoneMergeManagerBase &dest, const ObZoneMergeManagerBase &src);
......
......@@ -226,6 +226,11 @@ bool ObGlobalMergeInfo::is_merge_error() const
return (is_merge_error_ > 0);
}
bool ObGlobalMergeInfo::is_in_verifying_status() const
{
return (ObZoneMergeInfo::MERGE_STATUS_VERIFYING == merge_status_);
}
bool ObGlobalMergeInfo::is_valid() const
{
bool is_valid = true;
......
......@@ -111,6 +111,7 @@ public:
bool is_in_merge() const;
bool is_valid() const;
bool is_merge_error() const;
bool is_in_verifying_status() const;
ObGlobalMergeInfo &operator = (const ObGlobalMergeInfo &other) = delete;
int assign(const ObGlobalMergeInfo &other);
// differ from assign, only exclude 'need_update_' copy
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册