This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch branch-4.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-4.0 by this push:
new e4932ef4a2b branch-4.0: [fix](recycler) skip packed slice deletion
during recycle rowsets (#65534)
e4932ef4a2b is described below
commit e4932ef4a2bdca421627fef8b48e34b0c321edbd
Author: Yixuan Wang <[email protected]>
AuthorDate: Tue Jul 14 14:53:15 2026 +0800
branch-4.0: [fix](recycler) skip packed slice deletion during recycle
rowsets (#65534)
pick: https://github.com/apache/doris/pull/63295
---
cloud/src/recycler/recycler.cpp | 41 +++++++++++++++++++++++++++++++++--------
cloud/test/recycler_test.cpp | 6 +++++-
2 files changed, 38 insertions(+), 9 deletions(-)
diff --git a/cloud/src/recycler/recycler.cpp b/cloud/src/recycler/recycler.cpp
index 0c0decbf346..aee8559bd11 100644
--- a/cloud/src/recycler/recycler.cpp
+++ b/cloud/src/recycler/recycler.cpp
@@ -105,6 +105,21 @@ bool filter_out_instance(const std::string& instance_id) {
config::recycle_whitelist.end();
}
+bool is_packed_slice_path(const doris::RowsetMetaCloudPB& rowset, const
std::string& path) {
+ const auto& locations = rowset.packed_slice_locations();
+ auto it = locations.find(path);
+ return it != locations.end() && it->second.has_packed_file_path() &&
+ !it->second.packed_file_path().empty();
+}
+
+void add_file_to_delete_if_not_packed(const doris::RowsetMetaCloudPB& rowset,
+ const std::string& path,
+ std::vector<std::string>* file_paths) {
+ if (!is_packed_slice_path(rowset, path)) {
+ file_paths->push_back(path);
+ }
+}
+
} // namespace
// return 0 for success get a key, 1 for key not found, negative for error
@@ -3131,14 +3146,19 @@ int InstanceRecycler::delete_rowset_data(const
RowsetMetaCloudPB& rs_meta_pb) {
int64_t tablet_id = rs_meta_pb.tablet_id();
const auto& rowset_id = rs_meta_pb.rowset_id_v2();
for (int64_t i = 0; i < num_segments; ++i) {
- file_paths.push_back(segment_path(tablet_id, rowset_id, i));
+ add_file_to_delete_if_not_packed(rs_meta_pb, segment_path(tablet_id,
rowset_id, i),
+ &file_paths);
if (index_format == InvertedIndexStorageFormatPB::V1) {
for (const auto& index_id : index_ids) {
- file_paths.push_back(inverted_index_path_v1(tablet_id,
rowset_id, i, index_id.first,
- index_id.second));
+ add_file_to_delete_if_not_packed(
+ rs_meta_pb,
+ inverted_index_path_v1(tablet_id, rowset_id, i,
index_id.first,
+ index_id.second),
+ &file_paths);
}
} else if (!index_ids.empty()) {
- file_paths.push_back(inverted_index_path_v2(tablet_id, rowset_id,
i));
+ add_file_to_delete_if_not_packed(
+ rs_meta_pb, inverted_index_path_v2(tablet_id, rowset_id,
i), &file_paths);
}
}
@@ -3882,11 +3902,15 @@ int InstanceRecycler::delete_rowset_data(
continue;
}
for (int64_t i = 0; i < num_segments; ++i) {
- file_paths.push_back(segment_path(tablet_id, rowset_id, i));
+ add_file_to_delete_if_not_packed(rs, segment_path(tablet_id,
rowset_id, i),
+ &file_paths);
if (index_format == InvertedIndexStorageFormatPB::V1) {
for (const auto& index_id : index_ids) {
- file_paths.push_back(inverted_index_path_v1(tablet_id,
rowset_id, i,
-
index_id.first, index_id.second));
+ add_file_to_delete_if_not_packed(
+ rs,
+ inverted_index_path_v1(tablet_id, rowset_id, i,
index_id.first,
+ index_id.second),
+ &file_paths);
}
} else if (!index_ids.empty() || inverted_index_get_ret == 1) {
// try to recycle inverted index v2 when get_ret == 1
@@ -3898,7 +3922,8 @@ int InstanceRecycler::delete_rowset_data(
.tag("inverted index v2 path",
inverted_index_path_v2(tablet_id, rowset_id,
i));
}
- file_paths.push_back(inverted_index_path_v2(tablet_id,
rowset_id, i));
+ add_file_to_delete_if_not_packed(
+ rs, inverted_index_path_v2(tablet_id, rowset_id, i),
&file_paths);
}
}
}
diff --git a/cloud/test/recycler_test.cpp b/cloud/test/recycler_test.cpp
index 68ed9b11c64..218f7fa57f6 100644
--- a/cloud/test/recycler_test.cpp
+++ b/cloud/test/recycler_test.cpp
@@ -5628,6 +5628,9 @@ TEST(RecyclerTest,
delete_rowset_data_packed_file_single_rowset) {
EXPECT_EQ(TxnErrorCode::TXN_KEY_NOT_FOUND, txn->get(merged_key,
&updated_val));
EXPECT_EQ(1, accessor->exists(packed_file_path));
+ for (int i = 0; i < rowset.num_segments(); ++i) {
+ EXPECT_EQ(0, accessor->exists(segment_path(rowset.tablet_id(),
rowset.rowset_id_v2(), i)));
+ }
}
TEST(RecyclerTest, delete_rowset_data_packed_file_respects_recycled_tablet) {
@@ -5791,6 +5794,7 @@ TEST(RecyclerTest,
delete_rowset_data_packed_file_batch_rowsets) {
EXPECT_EQ(TxnErrorCode::TXN_KEY_NOT_FOUND, txn->get(merged_key,
&updated_val));
EXPECT_EQ(1, accessor->exists(packed_file_path));
+ EXPECT_EQ(0, accessor->exists(small_path));
}
TEST(RecyclerTest, delete_rowset_data_packed_file_multiple_groups) {
@@ -5909,7 +5913,7 @@ TEST(RecyclerTest,
delete_rowset_data_packed_file_multiple_groups) {
}
for (const auto& path : segment_paths) {
- EXPECT_EQ(1, accessor->exists(path));
+ EXPECT_EQ(0, accessor->exists(path));
}
for (const auto& path : index_paths) {
EXPECT_EQ(1, accessor->exists(path));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]