You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by zh...@apache.org on 2020/04/07 13:00:09 UTC

[incubator-doris] branch master updated: [Storage] Open data dirs parallelly (#3260)

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

zhaoc pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 162b1c5  [Storage] Open data dirs parallelly (#3260)
162b1c5 is described below

commit 162b1c5d8bfd8afb7b01951ea5c5a79d1ffe1679
Author: HuangWei <hu...@xiaomi.com>
AuthorDate: Tue Apr 7 20:59:56 2020 +0800

    [Storage] Open data dirs parallelly (#3260)
---
 be/src/olap/rowset/rowset.h    |  2 --
 be/src/olap/storage_engine.cpp | 45 ++++++++++++++++++++++++++++++++----------
 be/src/olap/storage_engine.h   |  2 ++
 3 files changed, 37 insertions(+), 12 deletions(-)

diff --git a/be/src/olap/rowset/rowset.h b/be/src/olap/rowset/rowset.h
index 30cf314..2c509eb 100644
--- a/be/src/olap/rowset/rowset.h
+++ b/be/src/olap/rowset/rowset.h
@@ -204,8 +204,6 @@ public:
     // return whether `path` is one of the files in this rowset
     virtual bool check_path(const std::string& path) = 0;
 
-    std::string rowset_path() const { return _rowset_path; }
-
     // return an unique identifier string for this rowset
     std::string unique_id() const {
         return _rowset_path + "/" + rowset_id().to_string();
diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp
index d8be355..16b9025 100644
--- a/be/src/olap/storage_engine.cpp
+++ b/be/src/olap/storage_engine.cpp
@@ -148,16 +148,8 @@ void StorageEngine::load_data_dirs(const std::vector<DataDir*>& data_dirs) {
 
 OLAPStatus StorageEngine::_open() {
     // init store_map
-    for (auto& path : _options.store_paths) {
-        DataDir* store = new DataDir(path.path, path.capacity_bytes, path.storage_medium,
-                                     _tablet_manager.get(), _txn_manager.get());
-        auto st = store->init();
-        if (!st.ok()) {
-            LOG(WARNING) << "Store load failed, path=" << path.path;
-            return OLAP_ERR_INVALID_ROOT_PATH;
-        }
-        _store_map.emplace(path.path, store);
-    }
+    RETURN_NOT_OK(_init_store_map());
+
     _effective_cluster_id = config::cluster_id;
     RETURN_NOT_OK_LOG(_check_all_root_path_cluster_id(), "fail to check cluster info.");
 
@@ -185,6 +177,39 @@ OLAPStatus StorageEngine::_open() {
     return OLAP_SUCCESS;
 }
 
+OLAPStatus StorageEngine::_init_store_map() {
+    std::vector<DataDir*> tmp_stores;
+    std::vector<std::thread> threads;
+    std::atomic<bool> init_error{false};
+    for (auto& path : _options.store_paths) {
+        DataDir* store = new DataDir(path.path, path.capacity_bytes, path.storage_medium,
+                                     _tablet_manager.get(), _txn_manager.get());
+        tmp_stores.emplace_back(store);
+        threads.emplace_back([store, &init_error]() {
+            auto st = store->init();
+            if (!st.ok()) {
+                init_error = true;
+                LOG(WARNING) << "Store load failed, status="<< st.to_string() << ", path=" << store->path();
+            }
+        });
+    }
+    for (auto& thread : threads) {
+        thread.join();
+    }
+
+    if (init_error) {
+        for (auto store : tmp_stores) {
+            delete store;
+        }
+        return OLAP_ERR_INVALID_ROOT_PATH;
+    }
+
+    for (auto store : tmp_stores) {
+        _store_map.emplace(store->path(), store);
+    }
+    return OLAP_SUCCESS;
+}
+
 void StorageEngine::_update_storage_medium_type_count() {
     set<TStorageMedium::type> available_storage_medium_types;
 
diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h
index 8d32d9b..7177968 100644
--- a/be/src/olap/storage_engine.h
+++ b/be/src/olap/storage_engine.h
@@ -200,6 +200,8 @@ private:
     // Clear status(tables, ...)
     void _clear();
 
+    OLAPStatus _init_store_map();
+
     void _update_storage_medium_type_count();
 
     // Some check methods


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