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

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


The following commit(s) were added to refs/heads/branch-4.1 by this push:
     new a334145fee5 branch-4.1: [fix](compaction) Count empty rowsets in 
approximate compaction score #66610 (#66656)
a334145fee5 is described below

commit a334145fee572299c9f2535890a7baa600e1a0ad
Author: github-actions[bot] 
<41898282+github-actions[bot]@users.noreply.github.com>
AuthorDate: Tue Sep 22 16:07:53 2026 +0800

    branch-4.1: [fix](compaction) Count empty rowsets in approximate compaction 
score #66610 (#66656)
    
    Cherry-picked from #66610
    
    ---------
    
    Co-authored-by: Jamie <[email protected]>
---
 be/src/cloud/cloud_delete_task.cpp      |  1 +
 be/src/cloud/cloud_rowset_builder.cpp   |  4 ++-
 be/test/cloud/cloud_compaction_test.cpp | 45 +++++++++++++++++++++++++++++++++
 3 files changed, 49 insertions(+), 1 deletion(-)

diff --git a/be/src/cloud/cloud_delete_task.cpp 
b/be/src/cloud/cloud_delete_task.cpp
index 6ad6fd9d65e..db8aec687c6 100644
--- a/be/src/cloud/cloud_delete_task.cpp
+++ b/be/src/cloud/cloud_delete_task.cpp
@@ -112,6 +112,7 @@ Status CloudDeleteTask::execute(CloudStorageEngine& engine, 
const TPushReq& requ
     // Update tablet stats
     tablet->fetch_add_approximate_num_rowsets(1);
     tablet->fetch_add_approximate_cumu_num_rowsets(1);
+    tablet->fetch_add_approximate_cumu_num_deltas(1);
 
     // TODO(liaoxin) delete operator don't send calculate delete bitmap task 
from fe,
     //  then we don't need to set_txn_related_info here.
diff --git a/be/src/cloud/cloud_rowset_builder.cpp 
b/be/src/cloud/cloud_rowset_builder.cpp
index 29ece82d320..a1bbbdca8f3 100644
--- a/be/src/cloud/cloud_rowset_builder.cpp
+++ b/be/src/cloud/cloud_rowset_builder.cpp
@@ -17,6 +17,8 @@
 
 #include "cloud/cloud_rowset_builder.h"
 
+#include <algorithm>
+
 #include "cloud/cloud_meta_mgr.h"
 #include "cloud/cloud_storage_engine.h"
 #include "cloud/cloud_tablet.h"
@@ -124,7 +126,7 @@ void CloudRowsetBuilder::update_tablet_stats() {
     tablet->fetch_add_approximate_num_rows(_rowset->num_rows());
     tablet->fetch_add_approximate_data_size(_rowset->total_disk_size());
     tablet->fetch_add_approximate_cumu_num_rowsets(1);
-    tablet->fetch_add_approximate_cumu_num_deltas(_rowset->num_segments());
+    
tablet->fetch_add_approximate_cumu_num_deltas(std::max<int64_t>(_rowset->num_segments(),
 1));
     tablet->write_count.fetch_add(1, std::memory_order_relaxed);
 }
 
diff --git a/be/test/cloud/cloud_compaction_test.cpp 
b/be/test/cloud/cloud_compaction_test.cpp
index d67ea4244a3..6b88353d08a 100644
--- a/be/test/cloud/cloud_compaction_test.cpp
+++ b/be/test/cloud/cloud_compaction_test.cpp
@@ -30,6 +30,7 @@
 #include "cloud/cloud_base_compaction.h"
 #include "cloud/cloud_cluster_info.h"
 #include "cloud/cloud_cumulative_compaction.h"
+#include "cloud/cloud_rowset_builder.h"
 #include "cloud/cloud_storage_engine.h"
 #include "cloud/cloud_tablet.h"
 #include "cloud/cloud_tablet_mgr.h"
@@ -37,6 +38,7 @@
 #include "common/metrics/doris_metrics.h"
 #include "cpp/sync_point.h"
 #include "json2pb/json_to_pb.h"
+#include "runtime/runtime_profile.h"
 #include "storage/compaction/cumulative_compaction_time_series_policy.h"
 #include "storage/olap_common.h"
 #include "storage/rowset/rowset_factory.h"
@@ -340,6 +342,49 @@ static RowsetSharedPtr create_rowset(Version version, int 
num_segments, bool ove
     return rowset;
 }
 
+static RowsetSharedPtr create_prepared_rowset(int num_segments, int data_size) 
{
+    auto rs_meta = std::make_shared<RowsetMeta>();
+    rs_meta->set_rowset_type(BETA_ROWSET);
+    rs_meta->set_rowset_state(PREPARED);
+    rs_meta->set_num_segments(num_segments);
+    rs_meta->set_segments_overlap(OVERLAPPING);
+    rs_meta->set_total_disk_size(data_size);
+    RowsetSharedPtr rowset;
+    Status st = RowsetFactory::create_rowset(nullptr, "", rs_meta, &rowset);
+    if (!st.ok()) {
+        return nullptr;
+    }
+    return rowset;
+}
+
+TEST_F(CloudCompactionTest, update_tablet_stats_counts_zero_segment_rowset) {
+    auto tablet = std::make_shared<CloudTablet>(_engine, _tablet_meta);
+    {
+        std::unique_lock lock(tablet->get_header_lock());
+        tablet->reset_approximate_stats(0, 0, 0, 0);
+    }
+
+    RuntimeProfile profile("CloudCompactionTest");
+    CloudRowsetBuilder builder(_engine, WriteRequest {}, &profile);
+
+    auto empty_rowset = create_prepared_rowset(0, 0);
+    ASSERT_NE(empty_rowset, nullptr);
+    ASSERT_TRUE(empty_rowset->is_pending());
+    ASSERT_FALSE(empty_rowset->rowset_meta()->has_version());
+    builder._tablet = tablet;
+    builder._rowset = empty_rowset;
+    builder.update_tablet_stats();
+    EXPECT_EQ(tablet->fetch_add_approximate_cumu_num_deltas(0), 1);
+
+    auto overlapping_rowset = create_prepared_rowset(3, 41);
+    ASSERT_NE(overlapping_rowset, nullptr);
+    ASSERT_TRUE(overlapping_rowset->is_pending());
+    ASSERT_FALSE(overlapping_rowset->rowset_meta()->has_version());
+    builder._rowset = overlapping_rowset;
+    builder.update_tablet_stats();
+    EXPECT_EQ(tablet->fetch_add_approximate_cumu_num_deltas(0), 4);
+}
+
 TEST_F(CloudCompactionTest, 
cumulative_global_lock_failure_keeps_thread_count_balanced) {
     ASSERT_TRUE(ThreadPoolBuilder("CumuCompactionTaskThreadPoolTest")
                         .set_min_threads(1)


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

Reply via email to