diff --git a/src/share/restore/ob_restore_persist_helper.cpp b/src/share/restore/ob_restore_persist_helper.cpp index d28bd67ee..06eeebe22 100644 --- a/src/share/restore/ob_restore_persist_helper.cpp +++ b/src/share/restore/ob_restore_persist_helper.cpp @@ -979,6 +979,9 @@ int ObRestorePersistHelper::update_ls_restore_status( } else if (OB_FAIL(ls_restore_progress_table_operator.update_string_column(proxy, ls_key, OB_STR_COMMENT, comment, affected_rows))) { LOG_WARN("fail to update comment", K(ret), K(ls_key), KP(comment)); + } else if (affected_rows == 0) { + ret = OB_ENTRY_NOT_EXIST; + LOG_WARN("update row not exist", K(ret), K(ls_key)); } return ret; } diff --git a/src/storage/restore/ob_ls_restore_handler.cpp b/src/storage/restore/ob_ls_restore_handler.cpp index 22fc9d6e3..4902b54e3 100644 --- a/src/storage/restore/ob_ls_restore_handler.cpp +++ b/src/storage/restore/ob_ls_restore_handler.cpp @@ -797,7 +797,23 @@ int ObILSRestoreState::report_ls_restore_progress_( if (OB_FAIL(helper.init(ls_key.tenant_id_))) { LOG_WARN("fail to init restore table helper", K(ret), "tenant_id", ls_key.tenant_id_); } else if (OB_FAIL(helper.update_ls_restore_status(*proxy_, ls_key, trace_id, status, result, comment))) { - LOG_WARN("fail to update log restore status", K(ret)); + if (OB_ENTRY_NOT_EXIST == ret) { + // this ls may created by migrate. + LOG_INFO("ls restore progress not exist. this ls may created by migrate", K(ret), KPC(ls_)); + ObLSRestoreProgressPersistInfo ls_restore_info; + ls_restore_info.key_ = ls_key; + ls_restore_info.restore_scn_ = ls_restore_arg_->get_restore_scn(); + ls_restore_info.status_ = status; + ls_restore_info.result_ = result; + ls_restore_info.trace_id_ = trace_id; + if (OB_FAIL(ls_restore_info.comment_.assign(comment))) { + LOG_WARN("failed to assign comment", K(ret)); + } else if (OB_FAIL(helper.insert_initial_ls_restore_progress(*proxy_, ls_restore_info))) { + LOG_WARN("failed to insert initial ls restore progress", K(ret)); + } + } else { + LOG_WARN("fail to update log restore status", K(ret)); + } } return ret; } @@ -2550,7 +2566,8 @@ void ObLSRestoreResultMgr::set_result(const int result, const share::ObTaskId &t // 1. result_ is OB_SUCCESS; // 2. result_ is retrieable err, but input result is non retrieable err. lib::ObMutexGuard guard(mtx_); - if ((!can_retrieable_err(result) && can_retrieable_err(result_)) + if (retry_cnt_ >= OB_MAX_RESTORE_RETRY_TIMES) { // avoiding overwrite error code + } else if ((!can_retrieable_err(result) && can_retrieable_err(result_)) || OB_SUCCESS == result_) { result_ = result; trace_id_.set(trace_id);