diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index 19250c292027bc..d9b6f76217708b 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -1012,25 +1012,19 @@ void TabletMeta::_check_mow_rowset_cache_version_size(size_t rowset_cache_versio rowset_cache_version_size > _rs_metas.size() + _stale_rs_metas.size()) { std::stringstream ss; auto rowset_ids = _delete_bitmap->get_rowset_cache_version(); - for (const auto& rowset_id : rowset_ids) { - bool found = false; + std::set tablet_rowset_ids; + { + std::shared_lock rlock(_meta_lock); for (auto& rs_meta : _rs_metas) { - if (rs_meta->rowset_id() == rowset_id) { - found = true; - break; - } - } - if (found) { - continue; + tablet_rowset_ids.emplace(rs_meta->rowset_id().to_string()); } for (auto& rs_meta : _stale_rs_metas) { - if (rs_meta->rowset_id() == rowset_id) { - found = true; - break; - } + tablet_rowset_ids.emplace(rs_meta->rowset_id().to_string()); } - if (!found) { - ss << rowset_id.to_string() << ", "; + } + for (const auto& rowset_id : rowset_ids) { + if (tablet_rowset_ids.find(rowset_id) == tablet_rowset_ids.end()) { + ss << rowset_id << ", "; } } // size(rowset_cache_version) <= size(_rs_metas) + size(_stale_rs_metas) + size(_unused_rs) @@ -1412,11 +1406,11 @@ void DeleteBitmap::clear_rowset_cache_version() { VLOG_DEBUG << "clear agg cache version for tablet=" << _tablet_id; } -std::set DeleteBitmap::get_rowset_cache_version() { - std::set set; +std::set DeleteBitmap::get_rowset_cache_version() { + std::set set; std::shared_lock l(_rowset_cache_version_lock); for (auto& [k, _] : _rowset_cache_version) { - set.insert(k); + set.insert(k.to_string()); } return set; } diff --git a/be/src/olap/tablet_meta.h b/be/src/olap/tablet_meta.h index 39dba82a17e856..166bc606486cbd 100644 --- a/be/src/olap/tablet_meta.h +++ b/be/src/olap/tablet_meta.h @@ -582,7 +582,7 @@ class DeleteBitmap { void clear_rowset_cache_version(); - std::set get_rowset_cache_version(); + std::set get_rowset_cache_version(); /** * Calculate diffset with given `key_set`. All entries with keys contained in this delete bitmap but not