From 83f6c7e43975fb1f0f5de1cc488b054ecec26556 Mon Sep 17 00:00:00 2001 From: yangqise7en <877793735@qq.com> Date: Mon, 7 Aug 2023 10:48:38 +0000 Subject: [PATCH] fix check_ls_dag_exist & compaction iter not iter transfer tablet --- src/share/scheduler/ob_dag_scheduler.cpp | 5 ++++- src/share/scheduler/ob_dag_scheduler.h | 4 ++-- src/storage/compaction/ob_tablet_merge_task.cpp | 12 ++++++------ .../compaction/ob_tenant_tablet_scheduler.cpp | 2 +- 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/share/scheduler/ob_dag_scheduler.cpp b/src/share/scheduler/ob_dag_scheduler.cpp index bb9f18b88..f07e740a2 100755 --- a/src/share/scheduler/ob_dag_scheduler.cpp +++ b/src/share/scheduler/ob_dag_scheduler.cpp @@ -2196,7 +2196,10 @@ int ObTenantDagScheduler::check_ls_compaction_dag_exist_with_cancel( ObIDag *cancel_dag = nullptr; bool cancel_flag = false; int64_t cancel_dag_cnt = 0; - { + if (has_set_stop()) { // scheduler thread is stopped + exist = false; + COMMON_LOG(INFO, "dag scheduler is stopped", KR(ret), K(exist)); + } else { ObThreadCondGuard guard(scheduler_sync_); for (int64_t i = 0; i < ObIDag::MergeDagPrioCnt; ++i) { ObIDag *head = dag_list_[READY_DAG_LIST].get_head(ObIDag::MergeDagPrio[i]); diff --git a/src/share/scheduler/ob_dag_scheduler.h b/src/share/scheduler/ob_dag_scheduler.h index 74428153a..311ef4bc2 100644 --- a/src/share/scheduler/ob_dag_scheduler.h +++ b/src/share/scheduler/ob_dag_scheduler.h @@ -269,8 +269,8 @@ public: { return DAG_STATUS_FINISH == dag_status || DAG_STATUS_ABORT == dag_status; } - bool has_set_stop() { return is_stop_; } - void set_stop() { is_stop_ = true; } + bool has_set_stop() { return ATOMIC_LOAD(&is_stop_); } + void set_stop() { ATOMIC_SET(&is_stop_, true); } ObIDagNet *get_dag_net() const { return dag_net_; } void set_dag_net(ObIDagNet &dag_net) { diff --git a/src/storage/compaction/ob_tablet_merge_task.cpp b/src/storage/compaction/ob_tablet_merge_task.cpp index b4d45c74c..dd090ce39 100755 --- a/src/storage/compaction/ob_tablet_merge_task.cpp +++ b/src/storage/compaction/ob_tablet_merge_task.cpp @@ -274,8 +274,8 @@ int ObBasicTabletMergeDag::get_tablet_and_compat_mode() } else if (OB_FAIL(ctx_->ls_handle_.get_ls()->get_tablet_svr()->get_tablet( tablet_id_, tmp_tablet_handle, - 0, - ObMDSGetTabletMode::READ_WITHOUT_CHECK))) { + 0/*timeout*/, + ObMDSGetTabletMode::READ_ALL_COMMITED))) { LOG_WARN("failed to get tablet", K(ret), K(ls_id_), K(tablet_id_)); } else if (OB_FAIL(ObTabletMergeChecker::check_need_merge(ctx_->param_.merge_type_, *tmp_tablet_handle.get_obj()))) { if (OB_NO_NEED_MERGE != ret) { @@ -758,8 +758,8 @@ int ObTabletMergeExecutePrepareTask::get_tablet_and_result() } else if (OB_FAIL(ctx_->ls_handle_.get_ls()->get_tablet( ctx_->param_.tablet_id_, ctx_->tablet_handle_, - 0, - storage::ObMDSGetTabletMode::READ_WITHOUT_CHECK))) { + 0/*timeout*/, + storage::ObMDSGetTabletMode::READ_ALL_COMMITED))) { LOG_WARN("failed to get tablet", K(ret), K(ctx_->param_)); } else if (OB_FAIL(ObTabletMergeChecker::check_need_merge(ctx_->param_.merge_type_, *ctx_->tablet_handle_.get_obj()))) { if (OB_NO_NEED_MERGE != ret) { @@ -947,8 +947,8 @@ int ObTabletMergePrepareTask::process() } else if (OB_FAIL(ctx->ls_handle_.get_ls()->get_tablet( ctx->param_.tablet_id_, ctx->tablet_handle_, - 0, - storage::ObMDSGetTabletMode::READ_WITHOUT_CHECK))) { + 0/*timeout*/, + storage::ObMDSGetTabletMode::READ_ALL_COMMITED))) { LOG_WARN("failed to get tablet", K(ret), K(ctx->param_)); } else if (OB_FAIL(ObTabletMergeChecker::check_need_merge(ctx->param_.merge_type_, *ctx->tablet_handle_.get_obj()))) { if (OB_NO_NEED_MERGE != ret) { diff --git a/src/storage/compaction/ob_tenant_tablet_scheduler.cpp b/src/storage/compaction/ob_tenant_tablet_scheduler.cpp index f7e20d029..fa9adf8cf 100755 --- a/src/storage/compaction/ob_tenant_tablet_scheduler.cpp +++ b/src/storage/compaction/ob_tenant_tablet_scheduler.cpp @@ -1734,7 +1734,7 @@ int ObCompactionScheduleIterator::get_tablet_ids() int ObCompactionScheduleIterator::get_tablet_handle( const ObTabletID &tablet_id, ObTabletHandle &tablet_handle) { - return ls_tablet_svr_->get_tablet(tablet_id, tablet_handle, 0/*timeout*/); + return ls_tablet_svr_->get_tablet(tablet_id, tablet_handle, 0/*timeout*/, ObMDSGetTabletMode::READ_ALL_COMMITED); } int64_t ObCompactionScheduleIterator::to_string(char *buf, const int64_t buf_len) const