diff --git a/be/src/olap/rowset/alpha_rowset.cpp b/be/src/olap/rowset/alpha_rowset.cpp index 97642e0a489c8d..b017ce48b6435c 100644 --- a/be/src/olap/rowset/alpha_rowset.cpp +++ b/be/src/olap/rowset/alpha_rowset.cpp @@ -18,6 +18,7 @@ #include "olap/rowset/alpha_rowset.h" #include "olap/rowset/alpha_rowset_meta.h" #include "olap/rowset/rowset_meta_manager.h" +#include "util/hash_util.hpp" namespace doris { @@ -514,4 +515,9 @@ OLAPStatus AlphaRowset::reset_sizeinfo() { return OLAP_SUCCESS; } +std::string AlphaRowset::unique_id() { + // rowset path + rowset_id is unique for a rowset + return _rowset_path + "/" + std::to_string(rowset_id()); +} + } // namespace doris diff --git a/be/src/olap/rowset/alpha_rowset.h b/be/src/olap/rowset/alpha_rowset.h index fc1c227b2acdbd..8a65b66918974d 100644 --- a/be/src/olap/rowset/alpha_rowset.h +++ b/be/src/olap/rowset/alpha_rowset.h @@ -124,6 +124,8 @@ class AlphaRowset : public Rowset { // info by using segment's info OLAPStatus reset_sizeinfo(); + std::string unique_id() override; + private: OLAPStatus _init_segment_groups(); diff --git a/be/src/olap/rowset/rowset.h b/be/src/olap/rowset/rowset.h index 16513ad30aaeba..9eeb36fcf7f388 100644 --- a/be/src/olap/rowset/rowset.h +++ b/be/src/olap/rowset/rowset.h @@ -122,6 +122,8 @@ class Rowset : public std::enable_shared_from_this { virtual bool check_path(const std::string& path) = 0; + virtual std::string unique_id() = 0; + bool need_delete_file() { return _need_delete_file; } diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp index efa55e8780cd60..f4871bd4db92a8 100644 --- a/be/src/olap/storage_engine.cpp +++ b/be/src/olap/storage_engine.cpp @@ -761,10 +761,14 @@ void StorageEngine::start_delete_unused_rowset() { void StorageEngine::add_unused_rowset(RowsetSharedPtr rowset) { if (rowset == nullptr) { return; } _gc_mutex.lock(); - auto it = _unused_rowsets.find(rowset->rowset_id()); + LOG(INFO) << "add unused rowset, rowset id:" << rowset->rowset_id() + << ", version:" << rowset->version().first + << "-" << rowset->version().second + << ", unique id:" << rowset->unique_id(); + auto it = _unused_rowsets.find(rowset->unique_id()); if (it == _unused_rowsets.end()) { rowset->set_need_delete_file(true); - _unused_rowsets[rowset->rowset_id()] = rowset; + _unused_rowsets[rowset->unique_id()] = rowset; } _gc_mutex.unlock(); } diff --git a/be/src/olap/storage_engine.h b/be/src/olap/storage_engine.h index 4cc61e590719a0..fc5c1475401f95 100644 --- a/be/src/olap/storage_engine.h +++ b/be/src/olap/storage_engine.h @@ -298,7 +298,7 @@ class StorageEngine { static StorageEngine* _s_instance; std::unordered_map> _gc_files; - std::unordered_map _unused_rowsets; + std::unordered_map _unused_rowsets; Mutex _gc_mutex; std::thread _unused_rowset_monitor_thread;