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

zhangchen 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 58d0558203d [fix](mow) remove agg cache version for unused rowsets 
(#49511)
58d0558203d is described below

commit 58d0558203dfe607afefe4330f92e80b78cdce20
Author: meiyi <me...@selectdb.com>
AuthorDate: Thu Mar 27 16:23:10 2025 +0800

    [fix](mow) remove agg cache version for unused rowsets (#49511)
    
    remove agg cache version for unused rowsets
---
 be/src/olap/storage_engine.cpp |  6 +++++
 be/src/olap/tablet_meta.cpp    | 51 ++++++++++++++++++++++++++++++++++--------
 be/src/olap/tablet_meta.h      |  2 ++
 3 files changed, 50 insertions(+), 9 deletions(-)

diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp
index 3ba65813492..84a654e366d 100644
--- a/be/src/olap/storage_engine.cpp
+++ b/be/src/olap/storage_engine.cpp
@@ -949,6 +949,11 @@ void StorageEngine::_clean_unused_rowset_metas() {
         for (auto& rowset_meta : invalid_rowset_metas) {
             static_cast<void>(RowsetMetaManager::remove(
                     data_dir->get_meta(), rowset_meta->tablet_uid(), 
rowset_meta->rowset_id()));
+            TabletSharedPtr tablet = 
_tablet_manager->get_tablet(rowset_meta->tablet_id());
+            if (tablet && 
tablet->tablet_meta()->enable_unique_key_merge_on_write()) {
+                
tablet->tablet_meta()->delete_bitmap().remove_rowset_cache_version(
+                        rowset_meta->rowset_id());
+            }
         }
         LOG(INFO) << "remove " << invalid_rowset_metas.size()
                   << " invalid rowset meta from dir: " << data_dir->path();
@@ -1223,6 +1228,7 @@ void StorageEngine::start_delete_unused_rowset() {
             tablet && tablet->enable_unique_key_merge_on_write()) {
             tablet->tablet_meta()->delete_bitmap().remove({rs->rowset_id(), 0, 
0},
                                                           {rs->rowset_id(), 
UINT32_MAX, 0});
+            
tablet->tablet_meta()->delete_bitmap().remove_rowset_cache_version(rs->rowset_id());
         }
         Status status = rs->remove();
         unused_rowsets_counter << -1;
diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp
index 7c45f3fe388..371282cd751 100644
--- a/be/src/olap/tablet_meta.cpp
+++ b/be/src/olap/tablet_meta.cpp
@@ -1007,17 +1007,38 @@ void TabletMeta::clear_rowsets() {
 }
 
 void TabletMeta::_check_mow_rowset_cache_version_size(size_t 
rowset_cache_version_size) {
-    if (_enable_unique_key_merge_on_write &&
+    if (_enable_unique_key_merge_on_write && config::enable_mow_verbose_log &&
         rowset_cache_version_size > _rs_metas.size() + _stale_rs_metas.size()) 
{
-        std::string err_msg = fmt::format(
-                ". tablet: {}, rowset_cache_version size: {}, "
-                "_rs_metas size: {}, _stale_rs_metas size: {}",
-                _tablet_id, rowset_cache_version_size, _rs_metas.size(), 
_stale_rs_metas.size());
-        if (config::enable_mow_get_agg_correctness_check_core) {
-            CHECK(false) << err_msg;
-        } else {
-            DCHECK(false) << err_msg;
+        std::stringstream ss;
+        auto rowset_ids = _delete_bitmap->get_rowset_cache_version();
+        for (const auto& rowset_id : rowset_ids) {
+            bool found = false;
+            for (auto& rs_meta : _rs_metas) {
+                if (rs_meta->rowset_id() == rowset_id) {
+                    found = true;
+                    break;
+                }
+            }
+            if (found) {
+                continue;
+            }
+            for (auto& rs_meta : _stale_rs_metas) {
+                if (rs_meta->rowset_id() == rowset_id) {
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                ss << rowset_id.to_string() << ", ";
+            }
         }
+        // size(rowset_cache_version) <= size(_rs_metas) + 
size(_stale_rs_metas) + size(_unused_rs)
+        std::string msg = fmt::format(
+                "tablet: {}, rowset_cache_version size: {}, "
+                "_rs_metas size: {}, _stale_rs_metas size: {}, delta: {}. 
rowset only in cache: {}",
+                _tablet_id, rowset_cache_version_size, _rs_metas.size(), 
_stale_rs_metas.size(),
+                rowset_cache_version_size - _rs_metas.size() - 
_stale_rs_metas.size(), ss.str());
+        LOG(INFO) << msg;
     }
 }
 
@@ -1337,12 +1358,24 @@ bool 
DeleteBitmap::has_calculated_for_multi_segments(const RowsetId& rowset_id)
 size_t DeleteBitmap::remove_rowset_cache_version(const RowsetId& rowset_id) {
     std::lock_guard l(_rowset_cache_version_lock);
     _rowset_cache_version.erase(rowset_id);
+    VLOG_DEBUG << "remove agg cache version for tablet=" << _tablet_id
+               << ", rowset=" << rowset_id.to_string();
     return _rowset_cache_version.size();
 }
 
 void DeleteBitmap::clear_rowset_cache_version() {
     std::lock_guard l(_rowset_cache_version_lock);
     _rowset_cache_version.clear();
+    VLOG_DEBUG << "clear agg cache version for tablet=" << _tablet_id;
+}
+
+std::set<RowsetId> DeleteBitmap::get_rowset_cache_version() {
+    std::set<RowsetId> set;
+    std::shared_lock l(_rowset_cache_version_lock);
+    for (auto& [k, _] : _rowset_cache_version) {
+        set.insert(k);
+    }
+    return set;
 }
 
 DeleteBitmap::Version DeleteBitmap::_get_rowset_cache_version(const BitmapKey& 
bmk) const {
diff --git a/be/src/olap/tablet_meta.h b/be/src/olap/tablet_meta.h
index 47294e7c008..a235a103258 100644
--- a/be/src/olap/tablet_meta.h
+++ b/be/src/olap/tablet_meta.h
@@ -564,6 +564,8 @@ public:
 
     void clear_rowset_cache_version();
 
+    std::set<RowsetId> get_rowset_cache_version();
+
     class AggCachePolicy : public LRUCachePolicy {
     public:
         AggCachePolicy(size_t capacity)


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

Reply via email to