diff --git a/be/src/olap/data_dir.h b/be/src/olap/data_dir.h index e70083210394cf..5437a489c60b74 100644 --- a/be/src/olap/data_dir.h +++ b/be/src/olap/data_dir.h @@ -124,6 +124,8 @@ class DataDir { void update_user_data_size(int64_t size); + std::set tablet_set() { return _tablet_set; } + private: std::string _cluster_id_path() const { return _path + CLUSTER_ID_PREFIX; } Status _init_cluster_id(); diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp index b65652b9df5f84..c8105257073798 100644 --- a/be/src/olap/storage_engine.cpp +++ b/be/src/olap/storage_engine.cpp @@ -428,6 +428,18 @@ std::vector StorageEngine::get_stores_for_create_tablet( std::random_device rd; srand(rd()); std::random_shuffle(stores.begin(), stores.end()); + // Two random choices + for (int i = 0; i < stores.size(); i++) { + int j = i + 1; + if (j < stores.size()) { + if (stores[i]->tablet_set().size() > stores[j]->tablet_set().size()) { + std::swap(stores[i], stores[j]); + } + std::random_shuffle(stores.begin() + j, stores.end()); + } else { + break; + } + } return stores; }