summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-02-11 13:00:28 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-11 15:04:35 +0100
commitecf06437292740589533d87d527efd1020d4fca7 (patch)
tree3741f35e204672b31d8af3281cd3e5b24a7a3610 /src
parent19ce7a04ae2729c8073f05641d5dc42f7eba8e4b (diff)
downloadjustbuild-ecf06437292740589533d87d527efd1020d4fca7.tar.gz
BazelCapabilitiesClient: avoid unreasonable retries.
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp
index 7a7968bd..b0a47998 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp
@@ -76,8 +76,11 @@ auto BazelCapabilitiesClient::GetCapabilities(
}
std::optional<bazel_re::ServerCapabilities> response;
- auto get_capabilities =
- [&instance_name, &stub = *stub_, &response]() -> RetryResponse {
+ bool is_reasonable_to_retry = true;
+ auto get_capabilities = [&instance_name,
+ &stub = *stub_,
+ &response,
+ &is_reasonable_to_retry]() -> RetryResponse {
grpc::ClientContext context;
bazel_re::GetCapabilitiesRequest request;
@@ -90,9 +93,11 @@ auto BazelCapabilitiesClient::GetCapabilities(
response.emplace(std::move(capabilities));
return RetryResponse{.ok = true};
}
+
+ is_reasonable_to_retry = IsReasonableToRetry(status);
return RetryResponse{
.ok = false,
- .exit_retry_loop = false,
+ .exit_retry_loop = not is_reasonable_to_retry,
.error_msg = fmt::format("While obtaining capabilities: {}",
status.error_message())};
};
@@ -107,8 +112,9 @@ auto BazelCapabilitiesClient::GetCapabilities(
bool const cache_result = response.has_value();
auto result = std::make_shared<Capabilities>(Parse(std::move(response)));
- // Cache results only if they contain meaningful non-default capabilities:
- if (cache_result) {
+ // Cache results only if they contain meaningful non-default capabilities or
+ // there's no point in retrying:
+ if (cache_result or not is_reasonable_to_retry) {
std::unique_lock lock{lock_};
capabilities_.insert_or_assign(instance_name, result);
}