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

dataroaring 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 91c5640cae [fix](tablet clone) fix clone backend chose wrong disk 
(#23729)
91c5640cae is described below

commit 91c5640cae529fcfd14eb15c247c04f2f869f365
Author: yujun <yu.jun.re...@gmail.com>
AuthorDate: Fri Sep 1 15:12:35 2023 +0800

    [fix](tablet clone) fix clone backend chose wrong disk (#23729)
---
 be/src/olap/storage_engine.cpp         | 20 ++++++++++++++++----
 be/src/olap/storage_engine.h           |  4 ++--
 be/src/olap/task/engine_clone_task.cpp |  3 ++-
 3 files changed, 20 insertions(+), 7 deletions(-)

diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp
index b25e0862fc..d968c6010a 100644
--- a/be/src/olap/storage_engine.cpp
+++ b/be/src/olap/storage_engine.cpp
@@ -1043,7 +1043,7 @@ Status StorageEngine::create_tablet(const 
TCreateTabletReq& request, RuntimeProf
     return _tablet_manager->create_tablet(request, stores, profile);
 }
 
-Status StorageEngine::obtain_shard_path(TStorageMedium::type storage_medium,
+Status StorageEngine::obtain_shard_path(TStorageMedium::type storage_medium, 
int64_t path_hash,
                                         std::string* shard_path, DataDir** 
store) {
     LOG(INFO) << "begin to process obtain root path. storage_medium=" << 
storage_medium;
 
@@ -1058,18 +1058,30 @@ Status 
StorageEngine::obtain_shard_path(TStorageMedium::type storage_medium,
                 "no available disk can be used to create tablet.");
     }
 
+    *store = nullptr;
+    if (path_hash != -1) {
+        for (auto data_dir : stores) {
+            if (data_dir->path_hash() == path_hash) {
+                *store = data_dir;
+                break;
+            }
+        }
+    }
+    if (*store == nullptr) {
+        *store = stores[0];
+    }
+
     Status res = Status::OK();
     uint64_t shard = 0;
-    res = stores[0]->get_shard(&shard);
+    res = (*store)->get_shard(&shard);
     if (!res.ok()) {
         LOG(WARNING) << "fail to get root path shard. res=" << res;
         return res;
     }
 
     std::stringstream root_path_stream;
-    root_path_stream << stores[0]->path() << "/" << DATA_PREFIX << "/" << 
shard;
+    root_path_stream << (*store)->path() << "/" << DATA_PREFIX << "/" << shard;
     *shard_path = root_path_stream.str();
-    *store = stores[0];
 
     LOG(INFO) << "success to process obtain root path. path=" << shard_path;
     return res;
diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h
index 822f0a458b..b81dcabab5 100644
--- a/be/src/olap/storage_engine.h
+++ b/be/src/olap/storage_engine.h
@@ -122,8 +122,8 @@ public:
     //
     // @param [out] shard_path choose an available root_path to clone new 
tablet
     // @return error code
-    Status obtain_shard_path(TStorageMedium::type storage_medium, std::string* 
shared_path,
-                             DataDir** store);
+    Status obtain_shard_path(TStorageMedium::type storage_medium, int64_t 
path_hash,
+                             std::string* shared_path, DataDir** store);
 
     // Load new tablet to make it effective.
     //
diff --git a/be/src/olap/task/engine_clone_task.cpp 
b/be/src/olap/task/engine_clone_task.cpp
index 19143e1079..9b03375756 100644
--- a/be/src/olap/task/engine_clone_task.cpp
+++ b/be/src/olap/task/engine_clone_task.cpp
@@ -179,7 +179,8 @@ Status EngineCloneTask::_do_clone() {
         string local_shard_root_path;
         DataDir* store = nullptr;
         RETURN_IF_ERROR(StorageEngine::instance()->obtain_shard_path(
-                _clone_req.storage_medium, &local_shard_root_path, &store));
+                _clone_req.storage_medium, _clone_req.dest_path_hash, 
&local_shard_root_path,
+                &store));
         auto tablet_dir = fmt::format("{}/{}/{}", local_shard_root_path, 
_clone_req.tablet_id,
                                       _clone_req.schema_hash);
 


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

Reply via email to