From 7754619e2b50e19fa06fff3772850f01f45cd3c4 Mon Sep 17 00:00:00 2001 From: Yongqiang YANG <98214048+dataroaring@users.noreply.github.com> Date: Tue, 21 Mar 2023 12:52:48 +0800 Subject: [PATCH] [fix](quit) be can not quit cleanly due to deadlock (#17971) --- be/src/olap/data_dir.cpp | 9 ++++++++- be/src/olap/data_dir.h | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/be/src/olap/data_dir.cpp b/be/src/olap/data_dir.cpp index 8088b9a0fc..6bd647a3be 100644 --- a/be/src/olap/data_dir.cpp +++ b/be/src/olap/data_dir.cpp @@ -121,8 +121,8 @@ Status DataDir::init() { } void DataDir::stop_bg_worker() { - std::unique_lock lck(_check_path_mutex); _stop_bg_worker = true; + std::unique_lock lck(_check_path_mutex); _check_path_cv.notify_one(); } @@ -669,6 +669,10 @@ void DataDir::perform_path_scan() { continue; } for (const auto& tablet_id : tablet_ids) { + if (_stop_bg_worker) { + break; + } + auto tablet_id_path = fmt::format("{}/{}", shard_path, tablet_id); std::set schema_hashes; ret = FileUtils::list_dirs_files(tablet_id_path, &schema_hashes, nullptr, @@ -681,6 +685,9 @@ void DataDir::perform_path_scan() { for (const auto& schema_hash : schema_hashes) { int32_t interval_ms = config::path_scan_step_interval_ms; + if (_stop_bg_worker) { + break; + } if (interval_ms > 0) { std::this_thread::sleep_for(std::chrono::milliseconds(interval_ms)); } diff --git a/be/src/olap/data_dir.h b/be/src/olap/data_dir.h index 11e1005450..baa4bba93e 100644 --- a/be/src/olap/data_dir.h +++ b/be/src/olap/data_dir.h @@ -163,7 +163,7 @@ private: bool _check_pending_ids(const std::string& id); private: - bool _stop_bg_worker = false; + std::atomic _stop_bg_worker = false; std::string _path; size_t _path_hash;