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

Reply via email to