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]