Skip to content

Commit a586bac

Browse files
authored
[fix](cloud-mow) Fix clear GetDeleteBitmapResponse problem when geting delete bitmap fail and retry (#43358)
Problem Summary: pr #43261 doesn't clear GetDeleteBitmapResponse correctly, this pr fix this problem
1 parent 8c67af6 commit a586bac

File tree

4 files changed

+84
-1
lines changed

4 files changed

+84
-1
lines changed

be/src/cloud/cloud_meta_mgr.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -704,6 +704,13 @@ Status CloudMetaMgr::sync_tablet_delete_bitmap(CloudTablet* tablet, int64_t old_
704704
const auto& segment_ids = res.segment_ids();
705705
const auto& vers = res.versions();
706706
const auto& delete_bitmaps = res.segment_delete_bitmaps();
707+
if (rowset_ids.size() != segment_ids.size() || rowset_ids.size() != vers.size() ||
708+
rowset_ids.size() != delete_bitmaps.size()) {
709+
return Status::Error<ErrorCode::INTERNAL_ERROR, false>(
710+
"get delete bitmap data wrong,"
711+
"rowset_ids.size={},segment_ids.size={},vers.size={},delete_bitmaps.size={}",
712+
rowset_ids.size(), segment_ids.size(), vers.size(), delete_bitmaps.size());
713+
}
707714
for (size_t i = 0; i < rowset_ids.size(); i++) {
708715
RowsetId rst_id;
709716
rst_id.init(rowset_ids[i]);

cloud/src/meta-service/meta_service.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1942,6 +1942,11 @@ void MetaServiceImpl::get_delete_bitmap(google::protobuf::RpcController* control
19421942
last_ver = ver;
19431943
last_seg_id = seg_id;
19441944
} else {
1945+
TEST_SYNC_POINT_CALLBACK("get_delete_bitmap_code", &code);
1946+
if (code != MetaServiceCode::OK) {
1947+
msg = "test get get_delete_bitmap fail,code=" + MetaServiceCode_Name(code);
1948+
return;
1949+
}
19451950
response->mutable_segment_delete_bitmaps()->rbegin()->append(v);
19461951
}
19471952
}

cloud/src/meta-service/meta_service_helper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ void finish_rpc(std::string_view func_name, brpc::Controller* ctrl, Response* re
9696
res->clear_rowset_ids();
9797
res->clear_segment_ids();
9898
res->clear_versions();
99-
res->segment_delete_bitmaps();
99+
res->clear_segment_delete_bitmaps();
100100
}
101101
LOG(INFO) << "finish " << func_name << " from " << ctrl->remote_side()
102102
<< " status=" << res->status().ShortDebugString()

cloud/test/meta_service_test.cpp

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5036,6 +5036,77 @@ TEST(MetaServiceTest, DeleteBimapCommitTxnTest) {
50365036
}
50375037
}
50385038

5039+
TEST(MetaServiceTest, GetDeleteBitmapWithRetryTest) {
5040+
auto meta_service = get_meta_service();
5041+
SyncPoint::get_instance()->enable_processing();
5042+
size_t index = 0;
5043+
SyncPoint::get_instance()->set_call_back("get_delete_bitmap_code", [&](auto&& args) {
5044+
LOG(INFO) << "GET_DELETE_BITMAP_CODE,index=" << index;
5045+
if (++index < 2) {
5046+
*doris::try_any_cast<MetaServiceCode*>(args[0]) = MetaServiceCode::KV_TXN_TOO_OLD;
5047+
}
5048+
});
5049+
5050+
// get delete bitmap update lock
5051+
brpc::Controller cntl;
5052+
GetDeleteBitmapUpdateLockRequest get_lock_req;
5053+
GetDeleteBitmapUpdateLockResponse get_lock_res;
5054+
get_lock_req.set_cloud_unique_id("test_cloud_unique_id");
5055+
get_lock_req.set_table_id(100);
5056+
get_lock_req.add_partition_ids(123);
5057+
get_lock_req.set_expiration(5);
5058+
get_lock_req.set_lock_id(888);
5059+
get_lock_req.set_initiator(-1);
5060+
meta_service->get_delete_bitmap_update_lock(
5061+
reinterpret_cast<::google::protobuf::RpcController*>(&cntl), &get_lock_req,
5062+
&get_lock_res, nullptr);
5063+
ASSERT_EQ(get_lock_res.status().code(), MetaServiceCode::OK);
5064+
5065+
//first update new key
5066+
UpdateDeleteBitmapRequest update_delete_bitmap_req;
5067+
UpdateDeleteBitmapResponse update_delete_bitmap_res;
5068+
update_delete_bitmap_req.set_cloud_unique_id("test_cloud_unique_id");
5069+
update_delete_bitmap_req.set_table_id(100);
5070+
update_delete_bitmap_req.set_partition_id(123);
5071+
update_delete_bitmap_req.set_lock_id(888);
5072+
update_delete_bitmap_req.set_initiator(-1);
5073+
update_delete_bitmap_req.set_tablet_id(333);
5074+
std::string large_value = generate_random_string(300 * 1000 * 3);
5075+
update_delete_bitmap_req.add_rowset_ids("456");
5076+
update_delete_bitmap_req.add_segment_ids(0);
5077+
update_delete_bitmap_req.add_versions(2);
5078+
update_delete_bitmap_req.add_segment_delete_bitmaps(large_value);
5079+
meta_service->update_delete_bitmap(reinterpret_cast<google::protobuf::RpcController*>(&cntl),
5080+
&update_delete_bitmap_req, &update_delete_bitmap_res,
5081+
nullptr);
5082+
ASSERT_EQ(update_delete_bitmap_res.status().code(), MetaServiceCode::OK);
5083+
5084+
GetDeleteBitmapRequest get_delete_bitmap_req;
5085+
GetDeleteBitmapResponse get_delete_bitmap_res;
5086+
get_delete_bitmap_req.set_cloud_unique_id("test_cloud_unique_id");
5087+
get_delete_bitmap_req.set_tablet_id(333);
5088+
5089+
get_delete_bitmap_req.add_rowset_ids("456");
5090+
get_delete_bitmap_req.add_begin_versions(2);
5091+
get_delete_bitmap_req.add_end_versions(2);
5092+
5093+
meta_service->get_delete_bitmap(reinterpret_cast<google::protobuf::RpcController*>(&cntl),
5094+
&get_delete_bitmap_req, &get_delete_bitmap_res, nullptr);
5095+
ASSERT_EQ(get_delete_bitmap_res.status().code(), MetaServiceCode::OK);
5096+
ASSERT_EQ(get_delete_bitmap_res.rowset_ids_size(), 1);
5097+
ASSERT_EQ(get_delete_bitmap_res.segment_ids_size(), 1);
5098+
ASSERT_EQ(get_delete_bitmap_res.versions_size(), 1);
5099+
ASSERT_EQ(get_delete_bitmap_res.segment_delete_bitmaps_size(), 1);
5100+
5101+
ASSERT_EQ(get_delete_bitmap_res.rowset_ids(0), "456");
5102+
ASSERT_EQ(get_delete_bitmap_res.segment_ids(0), 0);
5103+
ASSERT_EQ(get_delete_bitmap_res.versions(0), 2);
5104+
ASSERT_EQ(get_delete_bitmap_res.segment_delete_bitmaps(0), large_value);
5105+
5106+
SyncPoint::get_instance()->disable_processing();
5107+
SyncPoint::get_instance()->clear_all_call_backs();
5108+
}
5109+
50395110
TEST(MetaServiceTest, GetVersion) {
50405111
auto service = get_meta_service();
50415112

0 commit comments

Comments
 (0)