diff --git a/src/rootserver/ddl_task/ob_ddl_scheduler.cpp b/src/rootserver/ddl_task/ob_ddl_scheduler.cpp index 74af93001a..c27489964d 100644 --- a/src/rootserver/ddl_task/ob_ddl_scheduler.cpp +++ b/src/rootserver/ddl_task/ob_ddl_scheduler.cpp @@ -2099,6 +2099,9 @@ int ObDDLScheduler::on_column_checksum_calc_reply( }))) { LOG_WARN("failed to modify task", K(ret)); } + if (OB_ENTRY_NOT_EXIST == ret) { + ret = OB_NEED_RETRY; + } LOG_INFO("receive column checksum response", K(ret), K(tablet_id), K(task_key), K(ret_code)); return ret; } @@ -2167,6 +2170,9 @@ int ObDDLScheduler::on_sstable_complement_job_reply( }))) { LOG_WARN("failed to modify task", K(ret)); } + if (OB_ENTRY_NOT_EXIST == ret) { + ret = OB_NEED_RETRY; + } return ret; } diff --git a/src/share/ob_ddl_task_executor.h b/src/share/ob_ddl_task_executor.h index 9952aa7551..d9a5f1e4b9 100644 --- a/src/share/ob_ddl_task_executor.h +++ b/src/share/ob_ddl_task_executor.h @@ -79,7 +79,7 @@ private: || common::OB_TRANS_CTX_NOT_EXIST == ret_code; } static bool is_retry(const int ret_code) { - return common::OB_EAGAIN == ret_code || common::OB_DDL_SCHEMA_VERSION_NOT_MATCH == ret_code || common::OB_TASK_EXPIRED == ret_code + return common::OB_EAGAIN == ret_code || common::OB_DDL_SCHEMA_VERSION_NOT_MATCH == ret_code || common::OB_TASK_EXPIRED == ret_code || common::OB_NEED_RETRY == ret_code || common::OB_ERR_SHARED_LOCK_CONFLICT == ret_code || common::OB_ERR_WAIT_REMOTE_SCHEMA_REFRESH == ret_code || common::OB_SCHEMA_EAGAIN == ret_code || common::OB_ERR_REMOTE_SCHEMA_NOT_FULL == ret_code || common::OB_ERR_EXCLUSIVE_LOCK_CONFLICT == ret_code || common::OB_ERR_EXCLUSIVE_LOCK_CONFLICT == ret_code || common::OB_ERR_EXCLUSIVE_LOCK_CONFLICT_NOWAIT == ret_code || common::OB_TRANS_STMT_NEED_RETRY == ret_code || common::OB_SCHEMA_NOT_UPTODATE == ret_code diff --git a/src/storage/ddl/ob_build_index_task.cpp b/src/storage/ddl/ob_build_index_task.cpp index e4e483ae06..9b5b8a1635 100644 --- a/src/storage/ddl/ob_build_index_task.cpp +++ b/src/storage/ddl/ob_build_index_task.cpp @@ -803,6 +803,13 @@ int ObUniqueCheckingDag::fill_dag_key(char *buf, const int64_t buf_len) const return ret; } +bool ObUniqueCheckingDag::ignore_warning() +{ + return OB_EAGAIN == dag_ret_ + || OB_NEED_RETRY == dag_ret_ + || OB_TASK_EXPIRED == dag_ret_; +} + bool ObUniqueCheckingDag::operator==(const ObIDag &other) const { int tmp_ret = OB_SUCCESS; diff --git a/src/storage/ddl/ob_build_index_task.h b/src/storage/ddl/ob_build_index_task.h index 36b1dd3b69..beb6369485 100644 --- a/src/storage/ddl/ob_build_index_task.h +++ b/src/storage/ddl/ob_build_index_task.h @@ -179,6 +179,7 @@ public: common::ObTabletID get_tablet_id() const { return tablet_id_; } uint64_t get_tenant_id() const { return tenant_id_; } share::ObLSID get_ls_id() const { return ls_id_; } + virtual bool ignore_warning() override; virtual int fill_comment(char *buf, const int64_t buf_len) const override; virtual int fill_dag_key(char *buf, const int64_t buf_len) const override; virtual lib::Worker::CompatMode get_compat_mode() const override diff --git a/src/storage/ddl/ob_complement_data_task.cpp b/src/storage/ddl/ob_complement_data_task.cpp index e9d579088d..4f700ff8f4 100644 --- a/src/storage/ddl/ob_complement_data_task.cpp +++ b/src/storage/ddl/ob_complement_data_task.cpp @@ -383,6 +383,13 @@ int ObComplementDataDag::create_first_task() return ret; } +bool ObComplementDataDag::ignore_warning() +{ + return OB_EAGAIN == dag_ret_ + || OB_NEED_RETRY == dag_ret_ + || OB_TASK_EXPIRED == dag_ret_; +} + int ObComplementDataDag::prepare_context() { int ret = OB_SUCCESS; diff --git a/src/storage/ddl/ob_complement_data_task.h b/src/storage/ddl/ob_complement_data_task.h index 56e9011bee..8eedeb6699 100644 --- a/src/storage/ddl/ob_complement_data_task.h +++ b/src/storage/ddl/ob_complement_data_task.h @@ -153,6 +153,7 @@ public: virtual uint64_t get_consumer_group_id() const override { return consumer_group_id_; } virtual int create_first_task() override; + virtual bool ignore_warning() override; // report replica build status to RS. int report_replica_build_status(); private: diff --git a/src/storage/ddl/ob_ddl_merge_task.cpp b/src/storage/ddl/ob_ddl_merge_task.cpp index 1139ad7837..9c22e6a6d0 100644 --- a/src/storage/ddl/ob_ddl_merge_task.cpp +++ b/src/storage/ddl/ob_ddl_merge_task.cpp @@ -201,7 +201,8 @@ bool ObDDLTableMergeDag::ignore_warning() return OB_LS_NOT_EXIST == dag_ret_ || OB_TABLET_NOT_EXIST == dag_ret_ || OB_TASK_EXPIRED == dag_ret_ - || OB_EAGAIN == dag_ret_; + || OB_EAGAIN == dag_ret_ + || OB_NEED_RETRY == dag_ret_; } /****************** ObDDLTableDumpTask *****************/ @@ -268,6 +269,9 @@ int ObDDLTableDumpTask::process() ObArray candidate_sstables; if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->get_freezed_ddl_kv(freeze_scn_, ddl_kv_handle))) { LOG_WARN("get ddl kv handle failed", K(ret), K(freeze_scn_)); + if (OB_ENTRY_NOT_EXIST == ret) { + ret = OB_NEED_RETRY; // dag is async, the ddl kv may be dumped, no need record in dag warning history + } } else if (OB_ISNULL(ddl_kv = static_cast(ddl_kv_handle.get_table()))) { ret = OB_ERR_UNEXPECTED; LOG_WARN("get ddl kv failed", K(ret)); @@ -370,6 +374,9 @@ int ObDDLTableMergeTask::process() LOG_INFO("tablet me says with major but no major, meaning its a migrated deleted tablet, skip"); } else if (OB_FAIL(ddl_kv_mgr_handle.get_obj()->get_ddl_param(ddl_param))) { LOG_WARN("get tablet ddl param failed", K(ret)); + if (OB_STATE_NOT_MATCH == ret) { + ret = OB_NEED_RETRY; + } } else if (merge_param_.start_scn_ > SCN::min_scn() && merge_param_.start_scn_ < ddl_param.start_scn_) { ret = OB_TASK_EXPIRED; LOG_INFO("ddl merge task expired, do nothing", K(merge_param_), "new_start_scn", ddl_param.start_scn_);