This is an automated email from the ASF dual-hosted git repository. gavinchou pushed a commit to branch branch-3.0 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-3.0 by this push: new 62f90bd47c2 branch-3.0: [enhancement](cloud) get delete bitmap api uses the unified rpc retry mechanism #46848 (#46873) 62f90bd47c2 is described below commit 62f90bd47c28cc4fec92915fbb1d544c36f9075f Author: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> AuthorDate: Mon Jan 13 17:12:55 2025 +0800 branch-3.0: [enhancement](cloud) get delete bitmap api uses the unified rpc retry mechanism #46848 (#46873) Cherry-picked from #46848 Co-authored-by: Luwei <lu...@selectdb.com> --- be/src/cloud/cloud_meta_mgr.cpp | 45 ++++++++++------------------------------- 1 file changed, 11 insertions(+), 34 deletions(-) diff --git a/be/src/cloud/cloud_meta_mgr.cpp b/be/src/cloud/cloud_meta_mgr.cpp index a6fe3e8d535..dc7022f9f2c 100644 --- a/be/src/cloud/cloud_meta_mgr.cpp +++ b/be/src/cloud/cloud_meta_mgr.cpp @@ -340,6 +340,8 @@ static std::string debug_info(const Request& req) { } else if constexpr (is_any_v<Request, RemoveDeleteBitmapUpdateLockRequest>) { return fmt::format(" table_id={}, tablet_id={}, lock_id={}", req.table_id(), req.tablet_id(), req.lock_id()); + } else if constexpr (is_any_v<Request, GetDeleteBitmapRequest>) { + return fmt::format(" tablet_id={}", req.tablet_id()); } else { static_assert(!sizeof(Request)); } @@ -373,7 +375,11 @@ Status retry_rpc(std::string_view op_name, const Request& req, Response* res, std::shared_ptr<MetaService_Stub> stub; RETURN_IF_ERROR(proxy->get(&stub)); brpc::Controller cntl; - cntl.set_timeout_ms(config::meta_service_brpc_timeout_ms); + if (op_name == "get delete bitmap") { + cntl.set_timeout_ms(3 * config::meta_service_brpc_timeout_ms); + } else { + cntl.set_timeout_ms(config::meta_service_brpc_timeout_ms); + } cntl.set_max_retry(kBrpcRetryTimes); res->Clear(); (stub.get()->*method)(&cntl, &req, res, nullptr); @@ -714,41 +720,12 @@ Status CloudMetaMgr::sync_tablet_delete_bitmap(CloudTablet* tablet, int64_t old_ VLOG_DEBUG << "send GetDeleteBitmapRequest: " << req.ShortDebugString(); - int retry_times = 0; - MetaServiceProxy* proxy; - RETURN_IF_ERROR(MetaServiceProxy::get_proxy(&proxy)); auto start = std::chrono::high_resolution_clock::now(); - while (true) { - std::shared_ptr<MetaService_Stub> stub; - RETURN_IF_ERROR(proxy->get(&stub)); - // When there are many delete bitmaps that need to be synchronized, it - // may take a longer time, especially when loading the tablet for the - // first time, so set a relatively long timeout time. - brpc::Controller cntl; - cntl.set_timeout_ms(3 * config::meta_service_brpc_timeout_ms); - cntl.set_max_retry(kBrpcRetryTimes); - res.Clear(); - stub->get_delete_bitmap(&cntl, &req, &res, nullptr); - if (cntl.Failed()) [[unlikely]] { - LOG_INFO("failed to get delete bitmap") - .tag("reason", cntl.ErrorText()) - .tag("tablet_id", tablet->tablet_id()) - .tag("partition_id", tablet->partition_id()) - .tag("tried", retry_times); - proxy->set_unhealthy(); - } else { - break; - } - - if (++retry_times > config::delete_bitmap_rpc_retry_times) { - if (cntl.Failed()) { - return Status::RpcError("failed to get delete bitmap, tablet={} err={}", - tablet->tablet_id(), cntl.ErrorText()); - } - break; - } - } + auto st = retry_rpc("get delete bitmap", req, &res, &MetaService_Stub::get_delete_bitmap); auto end = std::chrono::high_resolution_clock::now(); + if (st.code() == ErrorCode::THRIFT_RPC_ERROR) { + return st; + } if (res.status().code() == MetaServiceCode::TABLET_NOT_FOUND) { return Status::NotFound("failed to get delete bitmap: {}", res.status().msg()); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org