diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp | 16 |
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); } |