From 6551476e1ff3554ee3943ef4e585c69040bc2dfc Mon Sep 17 00:00:00 2001 From: obdev Date: Thu, 18 Jul 2024 14:17:26 +0000 Subject: [PATCH] fix ddl used old wait trans ctx under new status. --- src/rootserver/ddl_task/ob_constraint_task.cpp | 2 +- src/rootserver/ddl_task/ob_constraint_task.h | 1 - src/rootserver/ddl_task/ob_ddl_redefinition_task.h | 3 +-- src/rootserver/ddl_task/ob_ddl_task.cpp | 6 ++++++ src/rootserver/ddl_task/ob_ddl_task.h | 5 ++++- src/rootserver/ddl_task/ob_drop_index_task.cpp | 1 - src/rootserver/ddl_task/ob_drop_index_task.h | 1 - src/rootserver/ddl_task/ob_fts_index_build_task.h | 1 - src/rootserver/ddl_task/ob_index_build_task.h | 1 - src/rootserver/ddl_task/ob_modify_autoinc_task.cpp | 2 +- src/rootserver/ddl_task/ob_modify_autoinc_task.h | 1 - 11 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/rootserver/ddl_task/ob_constraint_task.cpp b/src/rootserver/ddl_task/ob_constraint_task.cpp index 25b897e538..ac5135337c 100755 --- a/src/rootserver/ddl_task/ob_constraint_task.cpp +++ b/src/rootserver/ddl_task/ob_constraint_task.cpp @@ -520,7 +520,7 @@ ObAsyncTask *ObForeignKeyConstraintValidationTask::deep_copy(char *buf, const in } ObConstraintTask::ObConstraintTask() - : ObDDLTask(ObDDLType::DDL_INVALID), lock_(), wait_trans_ctx_(), + : ObDDLTask(ObDDLType::DDL_INVALID), lock_(), alter_table_arg_(), root_service_(nullptr), check_job_ret_code_(INT64_MAX), check_replica_request_time_(0), snapshot_held_(false) { diff --git a/src/rootserver/ddl_task/ob_constraint_task.h b/src/rootserver/ddl_task/ob_constraint_task.h index 122c0b8ccd..75b69572e7 100644 --- a/src/rootserver/ddl_task/ob_constraint_task.h +++ b/src/rootserver/ddl_task/ob_constraint_task.h @@ -148,7 +148,6 @@ private: private: static const int64_t OB_CONSTRAINT_TASK_VERSION = 1; common::TCRWLock lock_; - ObDDLWaitTransEndCtx wait_trans_ctx_; obrpc::ObAlterTableArg alter_table_arg_; common::ObArenaAllocator allocator_; ObRootService *root_service_; diff --git a/src/rootserver/ddl_task/ob_ddl_redefinition_task.h b/src/rootserver/ddl_task/ob_ddl_redefinition_task.h index 57ac28baca..2be058bab8 100644 --- a/src/rootserver/ddl_task/ob_ddl_redefinition_task.h +++ b/src/rootserver/ddl_task/ob_ddl_redefinition_task.h @@ -128,7 +128,7 @@ class ObDDLRedefinitionTask : public ObDDLTask { public: explicit ObDDLRedefinitionTask(const share::ObDDLType task_type): - ObDDLTask(task_type), wait_trans_ctx_(), sync_tablet_autoinc_seq_ctx_(), + ObDDLTask(task_type), sync_tablet_autoinc_seq_ctx_(), build_replica_request_time_(0), complete_sstable_job_ret_code_(INT64_MAX), alter_table_arg_(), dependent_task_result_map_(), snapshot_held_(false), has_synced_autoincrement_(false), has_synced_stats_info_(false), update_autoinc_job_ret_code_(INT64_MAX), update_autoinc_job_time_(0), @@ -281,7 +281,6 @@ protected: static const int64_t MAX_DEPEND_OBJECT_COUNT = 100L; static const int64_t RETRY_INTERVAL = 1 * 1000 * 1000; // 1s static const int64_t RETRY_LIMIT = 100; - ObDDLWaitTransEndCtx wait_trans_ctx_; ObSyncTabletAutoincSeqCtx sync_tablet_autoinc_seq_ctx_; int64_t build_replica_request_time_; int64_t complete_sstable_job_ret_code_; diff --git a/src/rootserver/ddl_task/ob_ddl_task.cpp b/src/rootserver/ddl_task/ob_ddl_task.cpp index 0e47ddb6fb..805f154253 100644 --- a/src/rootserver/ddl_task/ob_ddl_task.cpp +++ b/src/rootserver/ddl_task/ob_ddl_task.cpp @@ -1161,6 +1161,7 @@ int ObDDLTask::switch_status(const ObDDLTaskStatus new_status, const bool enable add_event_info(real_new_status, dst_tenant_id_); task_status_ = real_new_status; delay_schedule_time_ = 0; // when status changed, schedule immediately + clear_old_status_context(); LOG_INFO("ddl_scheduler switch status", K(ret), "ddl_event_info", ObDDLEventInfo(), K(task_status_)); } @@ -3849,5 +3850,10 @@ int ObDDLTask::remove_sql_exec_addr(const common::ObAddr &addr) return ret; } +void ObDDLTask::clear_old_status_context() +{ + wait_trans_ctx_.reset(); +} + } // end namespace rootserver } // end namespace oceanbase diff --git a/src/rootserver/ddl_task/ob_ddl_task.h b/src/rootserver/ddl_task/ob_ddl_task.h index 4d4c9069c3..06d1fa7710 100755 --- a/src/rootserver/ddl_task/ob_ddl_task.h +++ b/src/rootserver/ddl_task/ob_ddl_task.h @@ -542,7 +542,7 @@ public: parent_task_id_(0), parent_task_key_(), task_version_(0), parallelism_(0), allocator_(lib::ObLabel("DdlTask")), compat_mode_(lib::Worker::CompatMode::INVALID), err_code_occurence_cnt_(0), longops_stat_(nullptr), gmt_create_(0), stat_info_(), delay_schedule_time_(0), next_schedule_ts_(0), - execution_id_(-1), start_time_(0), data_format_version_(0), is_pre_split_(false) + execution_id_(-1), start_time_(0), data_format_version_(0), is_pre_split_(false), wait_trans_ctx_() {} virtual ~ObDDLTask() {} virtual int process() = 0; @@ -678,6 +678,8 @@ protected: } int init_ddl_task_monitor_info(const uint64_t target_table_id); virtual bool task_can_retry() const { return true; } +private: + void clear_old_status_context(); protected: static const int64_t TASK_EXECUTE_TIME_THRESHOLD = 3 * 24 * 60 * 60 * 1000000L; // 3 days common::TCRWLock lock_; @@ -719,6 +721,7 @@ protected: uint64_t data_format_version_; int64_t consumer_group_id_; bool is_pre_split_; + ObDDLWaitTransEndCtx wait_trans_ctx_; }; enum ColChecksumStat diff --git a/src/rootserver/ddl_task/ob_drop_index_task.cpp b/src/rootserver/ddl_task/ob_drop_index_task.cpp index e9b34f902b..3195dd8b2c 100644 --- a/src/rootserver/ddl_task/ob_drop_index_task.cpp +++ b/src/rootserver/ddl_task/ob_drop_index_task.cpp @@ -28,7 +28,6 @@ using namespace oceanbase::sql; ObDropIndexTask::ObDropIndexTask() : ObDDLTask(DDL_DROP_INDEX), - wait_trans_ctx_(), root_service_(nullptr), drop_index_arg_() { diff --git a/src/rootserver/ddl_task/ob_drop_index_task.h b/src/rootserver/ddl_task/ob_drop_index_task.h index cb15046049..fd3329ea29 100644 --- a/src/rootserver/ddl_task/ob_drop_index_task.h +++ b/src/rootserver/ddl_task/ob_drop_index_task.h @@ -69,7 +69,6 @@ private: private: static const int64_t OB_DROP_INDEX_TASK_VERSION = 1; private: - ObDDLWaitTransEndCtx wait_trans_ctx_; ObRootService *root_service_; obrpc::ObDropIndexArg drop_index_arg_; }; diff --git a/src/rootserver/ddl_task/ob_fts_index_build_task.h b/src/rootserver/ddl_task/ob_fts_index_build_task.h index fac4151896..6a9c7949a9 100644 --- a/src/rootserver/ddl_task/ob_fts_index_build_task.h +++ b/src/rootserver/ddl_task/ob_fts_index_build_task.h @@ -144,7 +144,6 @@ private: int64_t drop_index_task_id_; bool drop_index_task_submitted_; ObRootService *root_service_; - ObDDLWaitTransEndCtx wait_trans_ctx_; obrpc::ObCreateIndexArg create_index_arg_; common::hash::ObHashMap dependent_task_result_map_; }; diff --git a/src/rootserver/ddl_task/ob_index_build_task.h b/src/rootserver/ddl_task/ob_index_build_task.h index a4cfca5dfb..2fb50b85dd 100644 --- a/src/rootserver/ddl_task/ob_index_build_task.h +++ b/src/rootserver/ddl_task/ob_index_build_task.h @@ -174,7 +174,6 @@ private: bool is_unique_index_; bool is_global_index_; ObRootService *root_service_; - ObDDLWaitTransEndCtx wait_trans_ctx_; bool snapshot_held_; bool is_sstable_complete_task_submitted_; int64_t sstable_complete_request_time_; diff --git a/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp b/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp index 6b1b32e91a..8c4ec89858 100644 --- a/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp +++ b/src/rootserver/ddl_task/ob_modify_autoinc_task.cpp @@ -161,7 +161,7 @@ ObAsyncTask *ObUpdateAutoincSequenceTask::deep_copy(char *buf, const int64_t buf } ObModifyAutoincTask::ObModifyAutoincTask() - : ObDDLTask(ObDDLType::DDL_INVALID), lock_(), wait_trans_ctx_(), alter_table_arg_(), + : ObDDLTask(ObDDLType::DDL_INVALID), lock_(), alter_table_arg_(), update_autoinc_job_ret_code_(INT64_MAX), update_autoinc_job_time_(0) { } diff --git a/src/rootserver/ddl_task/ob_modify_autoinc_task.h b/src/rootserver/ddl_task/ob_modify_autoinc_task.h index 42ebc06e7a..37900a8833 100644 --- a/src/rootserver/ddl_task/ob_modify_autoinc_task.h +++ b/src/rootserver/ddl_task/ob_modify_autoinc_task.h @@ -85,7 +85,6 @@ private: private: static const int64_t OB_MODIFY_AUTOINC_TASK_VERSION = 1L; common::TCRWLock lock_; - ObDDLWaitTransEndCtx wait_trans_ctx_; obrpc::ObAlterTableArg alter_table_arg_; int64_t update_autoinc_job_ret_code_; int64_t update_autoinc_job_time_;