From 6d820a15b829464d1233c2aa16c014c4830b7b80 Mon Sep 17 00:00:00 2001 From: AntiTopQuark Date: Thu, 22 Feb 2024 09:45:59 +0000 Subject: [PATCH] Prevent stopping WR task without initialization --- src/share/wr/ob_wr_task.cpp | 36 +++++++++++++++++++++++++++++++----- src/share/wr/ob_wr_task.h | 1 + 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/share/wr/ob_wr_task.cpp b/src/share/wr/ob_wr_task.cpp index a385f73180..e0615d19c7 100644 --- a/src/share/wr/ob_wr_task.cpp +++ b/src/share/wr/ob_wr_task.cpp @@ -44,7 +44,8 @@ WorkloadRepositoryTask::WorkloadRepositoryTask() snapshot_interval_(DEFAULT_SNAPSHOT_INTERVAL), tg_id_(-1), timeout_ts_(0), - is_running_task_(false) + is_running_task_(false), + is_inited_(false) {} int WorkloadRepositoryTask::schedule_one_task(int64_t interval) @@ -88,6 +89,7 @@ int WorkloadRepositoryTask::start() } else if (OB_FAIL(TG_START(tg_id_))) { LOG_WARN("failed to start wr task", K(ret)); } else { + is_inited_ = true; LOG_INFO("init wr task thread finished", K_(tg_id)); } return ret; @@ -95,22 +97,46 @@ int WorkloadRepositoryTask::start() void WorkloadRepositoryTask::stop() { - TG_STOP(tg_id_); + int ret = OB_SUCCESS; + if (OB_UNLIKELY(!is_inited_)) { + ret = OB_NOT_INIT; + LOG_WARN("wr task not init", K(ret)); + } else { + TG_STOP(tg_id_); + } } void WorkloadRepositoryTask::wait() { - TG_WAIT(tg_id_); + int ret = OB_SUCCESS; + if (OB_UNLIKELY(!is_inited_)) { + ret = OB_NOT_INIT; + LOG_WARN("wr task not init", K(ret)); + } else { + TG_WAIT(tg_id_); + } } void WorkloadRepositoryTask::destroy() { - TG_DESTROY(tg_id_); + int ret = OB_SUCCESS; + if (OB_UNLIKELY(!is_inited_)) { + ret = OB_NOT_INIT; + LOG_WARN("wr task not init", K(ret)); + } else { + TG_DESTROY(tg_id_); + } } void WorkloadRepositoryTask::cancel_current_task() { - TG_CANCEL(tg_id_, *this); + int ret = OB_SUCCESS; + if (OB_UNLIKELY(!is_inited_)) { + ret = OB_NOT_INIT; + LOG_WARN("wr task not init", K(ret)); + } else { + TG_CANCEL(tg_id_, *this); + } } // execute a deletion task every six snapshots completed diff --git a/src/share/wr/ob_wr_task.h b/src/share/wr/ob_wr_task.h index 898da99682..f7f7f3cc1a 100644 --- a/src/share/wr/ob_wr_task.h +++ b/src/share/wr/ob_wr_task.h @@ -191,6 +191,7 @@ private: int tg_id_; int64_t timeout_ts_; bool is_running_task_; + bool is_inited_; }; }//end namespace share