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 <[email protected]>
---
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: [email protected]
For additional commands, e-mail: [email protected]