From eee314944ed1dcb7fb0dbafaa9c1c4d5d279a482 Mon Sep 17 00:00:00 2001 From: bobhan1 Date: Thu, 5 Dec 2024 10:17:02 +0800 Subject: [PATCH] [Fix](merge-on-write) Should clear `GetDeleteBitmapUpdateLockResponse` when geting delete bitmap update lock fail and retry (#44975) Similar to https://github.com/apache/doris/pull/43261, `GetDeleteBitmapUpdateLockResponse` should be cleared after `get_delete_bitmap_update_lock` fails on MS. Otherwise BE may get staled compaction cnts and wrongly skip to sync rowsets before `update_delete_bitmap()` thus causing duplicate keys problem. --- cloud/src/meta-service/meta_service_helper.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cloud/src/meta-service/meta_service_helper.h b/cloud/src/meta-service/meta_service_helper.h index 5355ac0eb61ed2..e4ed7e2a231901 100644 --- a/cloud/src/meta-service/meta_service_helper.h +++ b/cloud/src/meta-service/meta_service_helper.h @@ -118,6 +118,12 @@ void finish_rpc(std::string_view func_name, brpc::Controller* ctrl, Response* re << " status=" << res->status().ShortDebugString() << " tablet=" << res->tablet_id() << " delete_bitmap_count=" << res->segment_delete_bitmaps_size(); + } else if constexpr (std::is_same_v) { + if (res->status().code() != MetaServiceCode::OK) { + res->clear_base_compaction_cnts(); + res->clear_cumulative_compaction_cnts(); + res->clear_cumulative_points(); + } } else if constexpr (std::is_same_v || std::is_same_v) { std::string debug_string = res->DebugString();