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

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


The following commit(s) were added to refs/heads/branch-3.1 by this push:
     new 481ea59b0c4 branch-3.1: [fix](mow) remove checker code for 
enable_delete_bitmap_merge_on_compaction #51676 (#53082)
481ea59b0c4 is described below

commit 481ea59b0c4d4415118471e65e9777ec992899d8
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Jul 11 13:54:04 2025 +0800

    branch-3.1: [fix](mow) remove checker code for 
enable_delete_bitmap_merge_on_compaction #51676 (#53082)
    
    Cherry-picked from #51676
    
    Co-authored-by: meiyi <[email protected]>
---
 cloud/src/common/config.h      |   3 -
 cloud/src/recycler/checker.cpp | 153 +++++------------------------------------
 cloud/src/recycler/checker.h   |   4 +-
 cloud/test/recycler_test.cpp   |  66 ------------------
 4 files changed, 17 insertions(+), 209 deletions(-)

diff --git a/cloud/src/common/config.h b/cloud/src/common/config.h
index f435af3a3bb..38e956e7a85 100644
--- a/cloud/src/common/config.h
+++ b/cloud/src/common/config.h
@@ -97,9 +97,6 @@ CONF_Int32(recycle_pool_parallelism, "40");
 CONF_Bool(enable_inverted_check, "false");
 // Currently only used for recycler test
 CONF_Bool(enable_delete_bitmap_inverted_check, "false");
-// checks if https://github.com/apache/doris/pull/40204 works as expected
-CONF_Bool(enable_delete_bitmap_storage_optimize_check, "false");
-CONF_mInt64(delete_bitmap_storage_optimize_check_version_gap, "1000");
 CONF_Bool(enable_delete_bitmap_storage_optimize_v2_check, "false");
 CONF_mInt64(delete_bitmap_storage_optimize_v2_check_skip_seconds, "300"); // 
5min
 // interval for scanning instances to do checks and inspections
diff --git a/cloud/src/recycler/checker.cpp b/cloud/src/recycler/checker.cpp
index 62df898815b..6d96fd86408 100644
--- a/cloud/src/recycler/checker.cpp
+++ b/cloud/src/recycler/checker.cpp
@@ -189,12 +189,6 @@ int Checker::start() {
                 }
             }
 
-            if (config::enable_delete_bitmap_storage_optimize_check) {
-                if (int ret = 
checker->do_delete_bitmap_storage_optimize_check(); ret != 0) {
-                    success = false;
-                }
-            }
-
             if (config::enable_mow_job_key_check) {
                 if (int ret = checker->do_mow_job_key_check(); ret != 0) {
                     success = false;
@@ -1221,113 +1215,6 @@ int InstanceChecker::do_delete_bitmap_inverted_check() {
     return (leaked_delete_bitmaps > 0 || abnormal_delete_bitmaps > 0) ? 1 : 0;
 }
 
-int InstanceChecker::check_delete_bitmap_storage_optimize(int64_t tablet_id) {
-    using Version = std::pair<int64_t, int64_t>;
-    struct RowsetDigest {
-        std::string rowset_id;
-        Version version;
-        doris::SegmentsOverlapPB segments_overlap;
-
-        bool operator<(const RowsetDigest& other) const {
-            return version.first < other.version.first;
-        }
-
-        bool produced_by_compaction() const {
-            return (version.first < version.second) ||
-                   ((version.first == version.second) && segments_overlap == 
NONOVERLAPPING);
-        }
-    };
-
-    // number of rowsets which may have problems
-    int64_t abnormal_rowsets_num {0};
-
-    std::vector<RowsetDigest> tablet_rowsets {};
-    // Get all visible rowsets of this tablet
-    auto collect_cb = [&tablet_rowsets](const doris::RowsetMetaCloudPB& 
rowset) {
-        if (rowset.start_version() == 0 && rowset.end_version() == 1) {
-            // ignore dummy rowset [0-1]
-            return;
-        }
-        tablet_rowsets.emplace_back(
-                rowset.rowset_id_v2(),
-                std::make_pair<int64_t, int64_t>(rowset.start_version(), 
rowset.end_version()),
-                rowset.segments_overlap_pb());
-    };
-    if (int ret = collect_tablet_rowsets(tablet_id, collect_cb); ret != 0) {
-        return ret;
-    }
-
-    std::sort(tablet_rowsets.begin(), tablet_rowsets.end());
-
-    // find right-most rowset which is produced by compaction
-    auto it = std::find_if(
-            tablet_rowsets.crbegin(), tablet_rowsets.crend(),
-            [](const RowsetDigest& rowset) { return 
rowset.produced_by_compaction(); });
-    if (it == tablet_rowsets.crend()) {
-        LOG(INFO) << fmt::format(
-                "[delete bitmap checker] skip to check delete bitmap storage 
optimize for "
-                "tablet_id={} because it doesn't have compacted rowsets.",
-                tablet_id);
-        return 0;
-    }
-
-    int64_t start_version = it->version.first;
-    int64_t pre_min_version = it->version.second;
-
-    // after BE sweeping stale rowsets, all rowsets in this tablet before
-    // should not have delete bitmaps with versions lower than 
`pre_min_version`
-    if (config::delete_bitmap_storage_optimize_check_version_gap > 0) {
-        pre_min_version -= 
config::delete_bitmap_storage_optimize_check_version_gap;
-        if (pre_min_version <= 1) {
-            LOG(INFO) << fmt::format(
-                    "[delete bitmap checker] skip to check delete bitmap 
storage optimize for "
-                    "tablet_id={} because pre_min_version is too small.",
-                    tablet_id);
-            return 0;
-        }
-    }
-
-    auto check_func = [pre_min_version, instance_id = instance_id_](
-                              int64_t tablet_id, std::string_view rowset_id, 
int64_t version,
-                              int64_t segment_id) -> int {
-        if (version < pre_min_version) {
-            LOG(WARNING) << fmt::format(
-                    "[delete bitmap check fails] delete bitmap storage 
optimize check fail for "
-                    "instance_id={}, tablet_id={}, rowset_id={}, found delete 
bitmap with "
-                    "version={} < pre_min_version={}",
-                    instance_id, tablet_id, rowset_id, version, 
pre_min_version);
-            return 1;
-        }
-        return 0;
-    };
-
-    for (const auto& rowset : tablet_rowsets) {
-        // check for all rowsets before the max compacted rowset
-        if (rowset.version.second < start_version) {
-            auto rowset_id = rowset.rowset_id;
-            int ret = traverse_rowset_delete_bitmaps(tablet_id, rowset_id, 
check_func);
-            if (ret < 0) {
-                return ret;
-            }
-
-            if (ret != 0) {
-                ++abnormal_rowsets_num;
-                TEST_SYNC_POINT_CALLBACK(
-                        
"InstanceChecker::check_delete_bitmap_storage_optimize.get_abnormal_rowset",
-                        &tablet_id, &rowset_id);
-            }
-        }
-    }
-
-    LOG(INFO) << fmt::format(
-            "[delete bitmap checker] finish check delete bitmap storage 
optimize for "
-            "instance_id={}, tablet_id={}, rowsets_num={}, 
abnormal_rowsets_num={}, "
-            "pre_min_version={}",
-            instance_id_, tablet_id, tablet_rowsets.size(), 
abnormal_rowsets_num, pre_min_version);
-
-    return (abnormal_rowsets_num > 1 ? 1 : 0);
-}
-
 int InstanceChecker::get_pending_delete_bitmap_keys(
         int64_t tablet_id, std::unordered_set<std::string>& 
pending_delete_bitmaps) {
     std::unique_ptr<Transaction> txn;
@@ -1520,6 +1407,9 @@ int 
InstanceChecker::check_delete_bitmap_storage_optimize_v2(
 }
 
 int InstanceChecker::do_delete_bitmap_storage_optimize_check(int version) {
+    if (version != 2) {
+        return -1;
+    }
     int64_t total_tablets_num {0};
     int64_t failed_tablets_num {0};
 
@@ -1531,20 +1421,13 @@ int 
InstanceChecker::do_delete_bitmap_storage_optimize_check(int version) {
     int ret = traverse_mow_tablet([&](int64_t tablet_id) {
         ++total_tablets_num;
         int64_t rowsets_with_useless_delete_bitmap_version = 0;
-        int res = 0;
-        if (version == 1) {
-            res = check_delete_bitmap_storage_optimize(tablet_id);
-        } else if (version == 2) {
-            res = check_delete_bitmap_storage_optimize_v2(
-                    tablet_id, rowsets_with_useless_delete_bitmap_version);
-            if (rowsets_with_useless_delete_bitmap_version >
-                max_rowsets_with_useless_delete_bitmap_version) {
-                max_rowsets_with_useless_delete_bitmap_version =
-                        rowsets_with_useless_delete_bitmap_version;
-                tablet_id_with_max_rowsets_with_useless_delete_bitmap_version 
= tablet_id;
-            }
-        } else {
-            return -1;
+        int res = check_delete_bitmap_storage_optimize_v2(
+                tablet_id, rowsets_with_useless_delete_bitmap_version);
+        if (rowsets_with_useless_delete_bitmap_version >
+            max_rowsets_with_useless_delete_bitmap_version) {
+            max_rowsets_with_useless_delete_bitmap_version =
+                    rowsets_with_useless_delete_bitmap_version;
+            tablet_id_with_max_rowsets_with_useless_delete_bitmap_version = 
tablet_id;
         }
         failed_tablets_num += (res != 0);
         return res;
@@ -1554,20 +1437,16 @@ int 
InstanceChecker::do_delete_bitmap_storage_optimize_check(int version) {
         return ret;
     }
 
-    if (version == 2) {
-        g_bvar_max_rowsets_with_useless_delete_bitmap_version.put(
-                instance_id_, max_rowsets_with_useless_delete_bitmap_version);
-    }
+    g_bvar_max_rowsets_with_useless_delete_bitmap_version.put(
+            instance_id_, max_rowsets_with_useless_delete_bitmap_version);
 
     std::stringstream ss;
     ss << "[delete bitmap checker] check delete bitmap storage optimize v" << 
version
        << " for instance_id=" << instance_id_ << ", total_tablets_num=" << 
total_tablets_num
-       << ", failed_tablets_num=" << failed_tablets_num;
-    if (version == 2) {
-        ss << ". max_rowsets_with_useless_delete_bitmap_version="
-           << max_rowsets_with_useless_delete_bitmap_version
-           << ", tablet_id=" << 
tablet_id_with_max_rowsets_with_useless_delete_bitmap_version;
-    }
+       << ", failed_tablets_num=" << failed_tablets_num
+       << ". max_rowsets_with_useless_delete_bitmap_version="
+       << max_rowsets_with_useless_delete_bitmap_version
+       << ", tablet_id=" << 
tablet_id_with_max_rowsets_with_useless_delete_bitmap_version;
     LOG(INFO) << ss.str();
 
     return (failed_tablets_num > 0) ? 1 : 0;
diff --git a/cloud/src/recycler/checker.h b/cloud/src/recycler/checker.h
index d1b909a4203..afa96ca5ae4 100644
--- a/cloud/src/recycler/checker.h
+++ b/cloud/src/recycler/checker.h
@@ -103,7 +103,7 @@ public:
     // NOTE: stale rowsets will be lost after BE restarts, so there may be 
some stale delete bitmaps
     // which will not be cleared.
     // version = 2 : https://github.com/apache/doris/pull/49822
-    int do_delete_bitmap_storage_optimize_check(int version = 1);
+    int do_delete_bitmap_storage_optimize_check(int version = 2);
 
     int do_mow_job_key_check();
 
@@ -130,8 +130,6 @@ private:
             const std::function<void(const doris::RowsetMetaCloudPB&)>& 
collect_cb);
     int get_pending_delete_bitmap_keys(int64_t tablet_id,
                                        std::unordered_set<std::string>& 
pending_delete_bitmaps);
-
-    int check_delete_bitmap_storage_optimize(int64_t tablet_id);
     int check_delete_bitmap_storage_optimize_v2(int64_t tablet_id, int64_t& 
abnormal_rowsets_num);
 
     std::atomic_bool stopped_ {false};
diff --git a/cloud/test/recycler_test.cpp b/cloud/test/recycler_test.cpp
index 96a2f93dc2a..abfc049636a 100644
--- a/cloud/test/recycler_test.cpp
+++ b/cloud/test/recycler_test.cpp
@@ -3130,8 +3130,6 @@ TEST(CheckerTest, delete_bitmap_inverted_check_abnormal) {
 }
 
 TEST(CheckerTest, delete_bitmap_storage_optimize_check_normal) {
-    config::delete_bitmap_storage_optimize_check_version_gap = 0;
-
     auto txn_kv = std::make_shared<MemTxnKv>();
     ASSERT_EQ(txn_kv->init(), 0);
 
@@ -3237,73 +3235,9 @@ TEST(CheckerTest, 
delete_bitmap_storage_optimize_check_normal) {
     }
 
     ASSERT_EQ(TxnErrorCode::TXN_OK, txn->commit());
-    ASSERT_EQ(checker.do_delete_bitmap_storage_optimize_check(), 0);
     ASSERT_EQ(checker.do_delete_bitmap_storage_optimize_check(2), 0);
 }
 
-TEST(CheckerTest, delete_bitmap_storage_optimize_check_abnormal) {
-    config::delete_bitmap_storage_optimize_check_version_gap = 0;
-    // abnormal case, some rowsets' delete bitmaps are not deleted as expected
-    auto txn_kv = std::make_shared<MemTxnKv>();
-    ASSERT_EQ(txn_kv->init(), 0);
-
-    InstanceInfoPB instance;
-    instance.set_instance_id(instance_id);
-    auto obj_info = instance.add_obj_info();
-    obj_info->set_id("1");
-
-    InstanceChecker checker(txn_kv, instance_id);
-    ASSERT_EQ(checker.init(instance), 0);
-    auto accessor = checker.accessor_map_.begin()->second;
-
-    // tablet_id -> [rowset_id]
-    std::map<std::int64_t, std::set<std::string>> expected_abnormal_rowsets {};
-    std::map<std::int64_t, std::set<std::string>> real_abnormal_rowsets {};
-    auto sp = SyncPoint::get_instance();
-    DORIS_CLOUD_DEFER {
-        SyncPoint::get_instance()->clear_all_call_backs();
-    };
-    
sp->set_call_back("InstanceChecker::check_delete_bitmap_storage_optimize.get_abnormal_rowset",
-                      [&real_abnormal_rowsets](auto&& args) {
-                          int64_t tablet_id = *try_any_cast<int64_t*>(args[0]);
-                          std::string rowset_id = 
*try_any_cast<std::string*>(args[1]);
-                          real_abnormal_rowsets[tablet_id].insert(rowset_id);
-                      });
-    sp->enable_processing();
-
-    std::unique_ptr<Transaction> txn;
-    ASSERT_EQ(TxnErrorCode::TXN_OK, txn_kv->create_txn(&txn));
-
-    constexpr int table_id = 10000, index_id = 10001, partition_id = 10002;
-
-    int64_t rowset_start_id = 700;
-    for (int tablet_id = 900001; tablet_id <= 900005; ++tablet_id) {
-        ASSERT_EQ(0,
-                  create_tablet(txn_kv.get(), table_id, index_id, 
partition_id, tablet_id, true));
-        std::vector<std::pair<int64_t, int64_t>> rowset_vers {{2, 2}, {3, 3}, 
{4, 4}, {5, 5},
-                                                              {6, 7}, {8, 8}, 
{9, 9}};
-        std::vector<std::pair<int64_t, int64_t>> delete_bitmaps_vers {
-                {2, 9}, {7, 9}, {4, 9}, {7, 9}, {7, 9}, {8, 9}, {9, 9}};
-        std::vector<bool> segments_overlap {true, true, true, true, false, 
true, true};
-        for (size_t i {0}; i < 7; i++) {
-            std::string rowset_id = std::to_string(rowset_start_id++);
-            create_committed_rowset_with_rowset_id(txn_kv.get(), 
accessor.get(), "1", tablet_id,
-                                                   rowset_vers[i].first, 
rowset_vers[i].second,
-                                                   rowset_id, 
segments_overlap[i], 1);
-            create_delete_bitmaps(txn.get(), tablet_id, rowset_id, 
delete_bitmaps_vers[i].first,
-                                  delete_bitmaps_vers[i].second);
-            if (delete_bitmaps_vers[i].first < 7) {
-                expected_abnormal_rowsets[tablet_id].insert(rowset_id);
-            }
-        }
-    }
-
-    ASSERT_EQ(TxnErrorCode::TXN_OK, txn->commit());
-
-    ASSERT_EQ(checker.do_delete_bitmap_storage_optimize_check(), 1);
-    ASSERT_EQ(expected_abnormal_rowsets, real_abnormal_rowsets);
-}
-
 std::unique_ptr<MetaServiceProxy> get_meta_service() {
     int ret = 0;
     // MemKv


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

Reply via email to