This is an automated email from the ASF dual-hosted git repository.

gavinchou 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 bc67fc9ef0e [fix](cloud) serialize cache init to avoid unstable cache 
pick (#44429)
bc67fc9ef0e is described below

commit bc67fc9ef0e39507697c01cb74771f8a59b83acd
Author: zhengyu <zhangzhen...@selectdb.com>
AuthorDate: Fri Nov 29 10:40:01 2024 +0800

    [fix](cloud) serialize cache init to avoid unstable cache pick (#44429)
    
    The original paralleled cache init will causing unstable pick of cache
    base path because the choice depends on the order of init which could be
    different after each BE reboot. Thus, cause cache missing and duplicate
    cache block across multiple caches (disk space waste).
    
    This commit will serialize the init process of multiple cache and using
    fixed order, i.e. the order explicitly declared in be conf:
    file_cache_path.
    
    Signed-off-by: zhengyu <zhangzhen...@selectdb.com>
---
 be/src/runtime/exec_env_init.cpp | 26 +++++++-------------------
 1 file changed, 7 insertions(+), 19 deletions(-)

diff --git a/be/src/runtime/exec_env_init.cpp b/be/src/runtime/exec_env_init.cpp
index 706fd7efd07..b7f926cc3b4 100644
--- a/be/src/runtime/exec_env_init.cpp
+++ b/be/src/runtime/exec_env_init.cpp
@@ -425,36 +425,24 @@ void 
ExecEnv::init_file_cache_factory(std::vector<doris::CachePath>& cache_paths
                    << ", reason=" << rest.msg();
         exit(-1);
     }
-    std::vector<std::thread> file_cache_init_threads;
 
-    std::list<doris::Status> cache_status;
+    doris::Status cache_status;
     for (auto& cache_path : cache_paths) {
         if (cache_path_set.find(cache_path.path) != cache_path_set.end()) {
             LOG(WARNING) << fmt::format("cache path {} is duplicate", 
cache_path.path);
             continue;
         }
 
-        file_cache_init_threads.emplace_back([&, status = 
&cache_status.emplace_back()]() {
-            *status = 
doris::io::FileCacheFactory::instance()->create_file_cache(
-                    cache_path.path, cache_path.init_settings());
-        });
-
-        cache_path_set.emplace(cache_path.path);
-    }
-
-    for (std::thread& thread : file_cache_init_threads) {
-        if (thread.joinable()) {
-            thread.join();
-        }
-    }
-    for (const auto& status : cache_status) {
-        if (!status.ok()) {
+        cache_status = 
doris::io::FileCacheFactory::instance()->create_file_cache(
+                cache_path.path, cache_path.init_settings());
+        if (!cache_status.ok()) {
             if (!doris::config::ignore_broken_disk) {
-                LOG(FATAL) << "failed to init file cache, err: " << status;
+                LOG(FATAL) << "failed to init file cache, err: " << 
cache_status;
                 exit(-1);
             }
-            LOG(WARNING) << "failed to init file cache, err: " << status;
+            LOG(WARNING) << "failed to init file cache, err: " << cache_status;
         }
+        cache_path_set.emplace(cache_path.path);
     }
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to