This is an automated email from the ASF dual-hosted git repository. plat1ko pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new 6d441baf70c Fix use-after-free during graceful shutdown (#33457) 6d441baf70c is described below commit 6d441baf70c0c2f5968e36209c67221c9964daaf Author: plat1ko <platonekos...@gmail.com> AuthorDate: Tue Apr 16 22:50:13 2024 +0800 Fix use-after-free during graceful shutdown (#33457) --- be/src/olap/olap_server.cpp | 27 ++++++++++++--------------- be/src/olap/storage_engine.h | 3 +++ 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/be/src/olap/olap_server.cpp b/be/src/olap/olap_server.cpp index aaa1e1dd7ac..73bd0e37f81 100644 --- a/be/src/olap/olap_server.cpp +++ b/be/src/olap/olap_server.cpp @@ -1304,9 +1304,6 @@ void StorageEngine::do_remove_unused_remote_files() { } void StorageEngine::_cold_data_compaction_producer_callback() { - std::unordered_set<int64_t> tablet_submitted; - std::mutex tablet_submitted_mtx; - while (!_stop_background_threads_latch.wait_for( std::chrono::seconds(config::cold_data_compaction_interval_sec))) { if (config::disable_auto_compaction || @@ -1316,8 +1313,8 @@ void StorageEngine::_cold_data_compaction_producer_callback() { std::unordered_set<int64_t> copied_tablet_submitted; { - std::lock_guard lock(tablet_submitted_mtx); - copied_tablet_submitted = tablet_submitted; + std::lock_guard lock(_cold_compaction_tablet_submitted_mtx); + copied_tablet_submitted = _cold_compaction_tablet_submitted; } int n = config::cold_data_compaction_thread_num - copied_tablet_submitted.size(); if (n <= 0) { @@ -1326,7 +1323,7 @@ void StorageEngine::_cold_data_compaction_producer_callback() { auto tablets = _tablet_manager->get_all_tablet([&copied_tablet_submitted](Tablet* t) { return t->tablet_meta()->cooldown_meta_id().initialized() && t->is_used() && t->tablet_state() == TABLET_RUNNING && - !copied_tablet_submitted.count(t->tablet_id()) && + !copied_tablet_submitted.contains(t->tablet_id()) && !t->tablet_meta()->tablet_schema()->disable_auto_compaction(); }); std::vector<std::pair<TabletSharedPtr, int64_t>> tablet_to_compact; @@ -1351,7 +1348,7 @@ void StorageEngine::_cold_data_compaction_producer_callback() { // else, need to follow { std::lock_guard lock(_running_cooldown_mutex); - if (_running_cooldown_tablets.count(t->table_id())) { + if (_running_cooldown_tablets.contains(t->table_id())) { // already in cooldown queue continue; } @@ -1374,12 +1371,12 @@ void StorageEngine::_cold_data_compaction_producer_callback() { [&, t = std::move(tablet), this]() { auto compaction = std::make_shared<ColdDataCompaction>(*this, t); { - std::lock_guard lock(tablet_submitted_mtx); - tablet_submitted.insert(t->tablet_id()); + std::lock_guard lock(_cold_compaction_tablet_submitted_mtx); + _cold_compaction_tablet_submitted.insert(t->tablet_id()); } Defer defer {[&] { - std::lock_guard lock(tablet_submitted_mtx); - tablet_submitted.erase(t->tablet_id()); + std::lock_guard lock(_cold_compaction_tablet_submitted_mtx); + _cold_compaction_tablet_submitted.erase(t->tablet_id()); }}; std::unique_lock cold_compaction_lock(t->get_cold_compaction_lock(), std::try_to_lock); @@ -1412,13 +1409,13 @@ void StorageEngine::_cold_data_compaction_producer_callback() { t = std::move( tablet)]() { { - std::lock_guard lock(tablet_submitted_mtx); - tablet_submitted.insert(t->tablet_id()); + std::lock_guard lock(_cold_compaction_tablet_submitted_mtx); + _cold_compaction_tablet_submitted.insert(t->tablet_id()); } auto st = t->cooldown(); { - std::lock_guard lock(tablet_submitted_mtx); - tablet_submitted.erase(t->tablet_id()); + std::lock_guard lock(_cold_compaction_tablet_submitted_mtx); + _cold_compaction_tablet_submitted.erase(t->tablet_id()); } if (!st.ok()) { // The cooldown of the replica may be relatively slow diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h index 362f899c81a..7e591aabcef 100644 --- a/be/src/olap/storage_engine.h +++ b/be/src/olap/storage_engine.h @@ -474,6 +474,9 @@ private: std::mutex _running_cooldown_mutex; std::unordered_set<int64_t> _running_cooldown_tablets; + std::mutex _cold_compaction_tablet_submitted_mtx; + std::unordered_set<int64_t> _cold_compaction_tablet_submitted; + // tablet_id, publish_version, transaction_id, partition_id std::map<int64_t, std::map<int64_t, std::pair<int64_t, int64_t>>> _async_publish_tasks; // aync publish for discontinuous versions of merge_on_write table --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org