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 d7ff8a0ccee branch-4.1: [fix](cloud) Respect recycle type when
deleting partial update rowsets (#68594) (#68665)
d7ff8a0ccee is described below
commit d7ff8a0ccee0c6c6cd837d3d4a0c2795b53b309d
Author: Yixuan Wang <[email protected]>
AuthorDate: Wed Sep 30 22:00:18 2026 +0800
branch-4.1: [fix](cloud) Respect recycle type when deleting partial update
rowsets (#68594) (#68665)
pick: https://github.com/apache/doris/pull/68594
---
cloud/src/recycler/recycler.cpp | 2 +-
cloud/test/recycler_test.cpp | 34 ++++++++++++++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/cloud/src/recycler/recycler.cpp b/cloud/src/recycler/recycler.cpp
index 7508dcf22d0..72a444f3da4 100644
--- a/cloud/src/recycler/recycler.cpp
+++ b/cloud/src/recycler/recycler.cpp
@@ -4432,7 +4432,7 @@ int InstanceRecycler::delete_rowset_data(
continue;
}
}
- if (rs.rowset_state() == RowsetStatePB::BEGIN_PARTIAL_UPDATE) {
+ if (rs.rowset_state() == RowsetStatePB::BEGIN_PARTIAL_UPDATE &&
!is_formal_rowset) {
// if rowset state is RowsetStatePB::BEGIN_PARTIAL_UPDATE, the
number of segments data
// may be larger than num_segments field in RowsetMeta, so we need
to delete the rowset's data by prefix
rowsets_delete_by_prefix.emplace_back(rs.resource_id(), tablet_id,
rs.rowset_id_v2());
diff --git a/cloud/test/recycler_test.cpp b/cloud/test/recycler_test.cpp
index 1df08daed36..df64727ae9c 100644
--- a/cloud/test/recycler_test.cpp
+++ b/cloud/test/recycler_test.cpp
@@ -7350,6 +7350,40 @@ TEST(RecyclerTest, delete_rowset_data) {
}
}
+TEST(RecyclerTest, delete_partial_update_rowset_data_by_recycling_state) {
+ auto txn_kv = std::make_shared<MemTxnKv>();
+ ASSERT_EQ(txn_kv->init(), 0);
+
+ constexpr auto resource_id = "partial_update_delete";
+ InstanceInfoPB instance;
+ instance.set_instance_id(instance_id);
+ instance.add_obj_info()->set_id(resource_id);
+ InstanceRecycler recycler(txn_kv, instance, thread_group,
+ std::make_shared<TxnLazyCommitter>(txn_kv));
+ ASSERT_EQ(recycler.init(), 0);
+ auto accessor = recycler.accessor_map_.at(resource_id);
+
+ doris::TabletSchemaCloudPB schema;
+ schema.set_schema_version(1);
+ auto rowset = create_rowset(resource_id, 10001, 10002, 1, schema,
+ RowsetStatePB::BEGIN_PARTIAL_UPDATE);
+ const auto segment = segment_path(rowset.tablet_id(),
rowset.rowset_id_v2(), 0);
+ const auto extra_segment = segment_path(rowset.tablet_id(),
rowset.rowset_id_v2(), 1);
+ std::map<std::string, doris::RowsetMetaCloudPB> rowsets
{{rowset.rowset_id_v2(), rowset}};
+
+ for (auto type : {RowsetRecyclingState::FORMAL_ROWSET,
RowsetRecyclingState::TMP_ROWSET}) {
+ SCOPED_TRACE(static_cast<int>(type));
+ ASSERT_EQ(accessor->put_file(segment, ""), 0);
+ ASSERT_EQ(accessor->put_file(extra_segment, ""), 0);
+
+ RecyclerMetricsContext metrics_context;
+ ASSERT_EQ(recycler.delete_rowset_data(rowsets, type, metrics_context),
0);
+ EXPECT_EQ(accessor->exists(segment), 1);
+ EXPECT_EQ(accessor->exists(extra_segment),
+ type == RowsetRecyclingState::FORMAL_ROWSET ? 0 : 1);
+ }
+}
+
TEST(RecyclerTest, delete_rowset_data_without_delete_bitmap_meta) {
auto txn_kv = std::make_shared<MemTxnKv>();
ASSERT_EQ(txn_kv->init(), 0);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]