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

dataroaring pushed a commit to branch branch-3.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-3.0 by this push:
     new 32eb08266e8 branch-3.0-pick: [Opt](merge-on-write) Check delete bitmap 
cache after writing it (#48233) (#48493)
32eb08266e8 is described below

commit 32eb08266e82c3f25491a98e3dd9941d2ef9d11a
Author: bobhan1 <[email protected]>
AuthorDate: Mon Mar 10 20:04:28 2025 +0800

    branch-3.0-pick: [Opt](merge-on-write) Check delete bitmap cache after 
writing it (#48233) (#48493)
    
    pick https://github.com/apache/doris/pull/48233
---
 be/src/cloud/cloud_tablet.cpp | 21 +++++++++++++++++++++
 be/src/cloud/cloud_tablet.h   |  3 +++
 be/src/olap/base_tablet.cpp   |  4 ++++
 be/src/olap/base_tablet.h     |  4 ++++
 4 files changed, 32 insertions(+)

diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp
index 2c92da574ff..bda4e8ea1a3 100644
--- a/be/src/cloud/cloud_tablet.cpp
+++ b/be/src/cloud/cloud_tablet.cpp
@@ -972,5 +972,26 @@ void CloudTablet::build_tablet_report_info(TTabletInfo* 
tablet_info) {
     // but it may be used in the future.
 }
 
+Status CloudTablet::check_delete_bitmap_cache(int64_t txn_id,
+                                              DeleteBitmap* 
expected_delete_bitmap) {
+    DeleteBitmapPtr cached_delete_bitmap;
+    CloudStorageEngine& engine = 
ExecEnv::GetInstance()->storage_engine().to_cloud();
+    Status st = engine.txn_delete_bitmap_cache().get_delete_bitmap(
+            txn_id, tablet_id(), &cached_delete_bitmap, nullptr, nullptr);
+    if (st.ok()) {
+        bool res = (expected_delete_bitmap->cardinality() == 
cached_delete_bitmap->cardinality());
+        auto msg = fmt::format(
+                "delete bitmap cache check failed, cur_cardinality={}, 
cached_cardinality={}"
+                "txn_id={}, tablet_id={}",
+                expected_delete_bitmap->cardinality(), 
cached_delete_bitmap->cardinality(), txn_id,
+                tablet_id());
+        if (!res) {
+            DCHECK(res) << msg;
+            return Status::InternalError<false>(msg);
+        }
+    }
+    return Status::OK();
+}
+
 #include "common/compile_check_end.h"
 } // namespace doris
diff --git a/be/src/cloud/cloud_tablet.h b/be/src/cloud/cloud_tablet.h
index 2f442a6221f..b2d6e8921b0 100644
--- a/be/src/cloud/cloud_tablet.h
+++ b/be/src/cloud/cloud_tablet.h
@@ -211,6 +211,9 @@ public:
 
     static void recycle_cached_data(const std::vector<RowsetSharedPtr>& 
rowsets);
 
+    // check that if the delete bitmap in delete bitmap cache has the same 
cardinality with the expected_delete_bitmap's
+    Status check_delete_bitmap_cache(int64_t txn_id, DeleteBitmap* 
expected_delete_bitmap) override;
+
 private:
     // FIXME(plat1ko): No need to record base size if rowsets are ordered by 
version
     void update_base_size(const Rowset& rs);
diff --git a/be/src/olap/base_tablet.cpp b/be/src/olap/base_tablet.cpp
index a7e9126344c..5ccac388bf3 100644
--- a/be/src/olap/base_tablet.cpp
+++ b/be/src/olap/base_tablet.cpp
@@ -1346,6 +1346,10 @@ Status BaseTablet::update_delete_bitmap(const 
BaseTabletSPtr& self, TabletTxnInf
     auto t5 = watch.get_elapse_time_us();
     RETURN_IF_ERROR(self->save_delete_bitmap(txn_info, txn_id, delete_bitmap,
                                              transient_rs_writer.get(), 
cur_rowset_ids));
+
+    // defensive check, check that the delete bitmap cache we wrote is correct
+    RETURN_IF_ERROR(self->check_delete_bitmap_cache(txn_id, 
delete_bitmap.get()));
+
     LOG(INFO) << "[Publish] construct delete bitmap tablet: " << 
self->tablet_id()
               << ", rowset_ids to add: "
               << (specified_rowsets.size() + rowsets_skip_alignment.size())
diff --git a/be/src/olap/base_tablet.h b/be/src/olap/base_tablet.h
index 816ed126fec..693f08dcac7 100644
--- a/be/src/olap/base_tablet.h
+++ b/be/src/olap/base_tablet.h
@@ -295,6 +295,10 @@ public:
             uint64_t* max_base_rowset_delete_bitmap_score,
             int64_t* max_base_rowset_delete_bitmap_score_tablet_id);
 
+    virtual Status check_delete_bitmap_cache(int64_t txn_id, DeleteBitmap* 
expected_delete_bitmap) {
+        return Status::OK();
+    }
+
 protected:
     // Find the missed versions until the spec_version.
     //


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to