diff options
Diffstat (limited to 'src')
7 files changed, 27 insertions, 9 deletions
diff --git a/src/buildtool/common/remote/TARGETS b/src/buildtool/common/remote/TARGETS index cdf4c72a..45583704 100644 --- a/src/buildtool/common/remote/TARGETS +++ b/src/buildtool/common/remote/TARGETS @@ -53,8 +53,12 @@ , "name": ["retry"] , "hdrs": ["retry.hpp"] , "srcs": ["retry.cpp"] - , "deps": [["@", "grpc", "", "grpc++"], ["src/buildtool/logging", "logging"]] + , "deps": + [ "retry_config" + , ["@", "grpc", "", "grpc++"] + , ["src/buildtool/logging", "logging"] + ] , "stage": ["src", "buildtool", "common", "remote"] - , "private-deps": ["retry_config", ["src/buildtool/logging", "log_level"]] + , "private-deps": [["src/buildtool/logging", "log_level"]] } } diff --git a/src/buildtool/common/remote/retry.cpp b/src/buildtool/common/remote/retry.cpp index 5d75585c..785cfa65 100644 --- a/src/buildtool/common/remote/retry.cpp +++ b/src/buildtool/common/remote/retry.cpp @@ -18,13 +18,13 @@ #include <chrono> #include <thread> -#include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/logging/log_level.hpp" auto WithRetry(CallableReturningRetryResponse const& f, + RetryConfig const& retry_config, Logger const& logger) noexcept -> bool { try { - auto const& attempts = RetryConfig::GetMaxAttempts(); + auto const& attempts = retry_config.GetMaxAttempts(); for (auto attempt = 1U; attempt <= attempts; ++attempt) { auto [ok, fatal, error_msg] = f(); if (ok) { @@ -39,7 +39,7 @@ auto WithRetry(CallableReturningRetryResponse const& f, // don't wait if it was the last attempt if (attempt < attempts) { auto const sleep_for_seconds = - RetryConfig::GetSleepTimeSeconds(attempt); + retry_config.GetSleepTimeSeconds(attempt); logger.Emit(kRetryLogLevel, "Attempt {}/{} failed{} Retrying in {} seconds.", attempt, @@ -64,10 +64,11 @@ auto WithRetry(CallableReturningRetryResponse const& f, return false; } auto WithRetry(CallableReturningGrpcStatus const& f, + RetryConfig const& retry_config, Logger const& logger) noexcept -> std::pair<bool, grpc::Status> { grpc::Status status{}; try { - auto attempts = RetryConfig::GetMaxAttempts(); + auto attempts = retry_config.GetMaxAttempts(); for (auto attempt = 1U; attempt <= attempts; ++attempt) { status = f(); if (status.ok() or @@ -77,7 +78,7 @@ auto WithRetry(CallableReturningGrpcStatus const& f, // don't wait if it was the last attempt if (attempt < attempts) { auto const sleep_for_seconds = - RetryConfig::GetSleepTimeSeconds(attempt); + retry_config.GetSleepTimeSeconds(attempt); logger.Emit( kRetryLogLevel, "Attempt {}/{} failed: {}: {}: Retrying in {} seconds.", diff --git a/src/buildtool/common/remote/retry.hpp b/src/buildtool/common/remote/retry.hpp index c0ce318b..6b8278a4 100644 --- a/src/buildtool/common/remote/retry.hpp +++ b/src/buildtool/common/remote/retry.hpp @@ -23,6 +23,7 @@ #include <utility> #include "grpcpp/grpcpp.h" +#include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/logging/logger.hpp" // Utility class to help detecting when exit the retry loop. This class can be @@ -51,6 +52,7 @@ using CallableReturningRetryResponse = std::function<RetryResponse(void)>; /// Retry loop interrupts when one of the two members of the function's returned /// RetryResponse object is set to true. [[nodiscard]] auto WithRetry(CallableReturningRetryResponse const& f, + RetryConfig const& retry_config, Logger const& logger) noexcept -> bool; using CallableReturningGrpcStatus = std::function<grpc::Status(void)>; @@ -59,6 +61,7 @@ using CallableReturningGrpcStatus = std::function<grpc::Status(void)>; /// Retry loop interrupts when function returns an error code different from /// UNAVAILABLE. [[nodiscard]] auto WithRetry(CallableReturningGrpcStatus const& f, + RetryConfig const& retry_config, Logger const& logger) noexcept -> std::pair<bool, grpc::Status>; diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS index d93eb280..deb75cfc 100644 --- a/src/buildtool/execution_api/remote/TARGETS +++ b/src/buildtool/execution_api/remote/TARGETS @@ -54,6 +54,7 @@ , ["src/buildtool/crypto", "hash_function"] , ["@", "grpc", "", "grpc++"] , ["src/buildtool/common/remote", "retry"] + , ["src/buildtool/common/remote", "retry_config"] , ["src/buildtool/execution_api/common", "message_limits"] , ["src/buildtool/crypto", "hash_function"] , ["src/utils/cpp", "path"] diff --git a/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp index 4f93b62d..50d236f6 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp @@ -17,6 +17,7 @@ #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/common/remote/client_common.hpp" #include "src/buildtool/common/remote/retry.hpp" +#include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/logging/log_level.hpp" BazelAcClient::BazelAcClient(std::string const& server, @@ -49,6 +50,7 @@ auto BazelAcClient::GetActionResult( grpc::ClientContext context; return stub_->GetActionResult(&context, request, &response); }, + RetryConfig::Instance(), logger_); if (not ok) { if (status.error_code() == grpc::StatusCode::NOT_FOUND) { diff --git a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp index af23e9b1..73f5c3ac 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -25,6 +25,7 @@ #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/common/remote/client_common.hpp" #include "src/buildtool/common/remote/retry.hpp" +#include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_api/common/execution_common.hpp" @@ -253,6 +254,7 @@ auto BazelCasClient::BatchReadBlobs( [&request, &batch_read_blobs]() { return batch_read_blobs(request); }, + RetryConfig::Instance(), logger_); })) { logger_.Emit(LogLevel::Error, "Failed to BatchReadBlobs."); @@ -364,6 +366,7 @@ auto BazelCasClient::SplitBlob(std::string const& instance_name, grpc::ClientContext context; return stub_->SplitBlob(&context, request, &response); }, + RetryConfig::Instance(), logger_); if (not ok) { LogStatus(&logger_, LogLevel::Error, status, "SplitBlob"); @@ -392,6 +395,7 @@ auto BazelCasClient::SpliceBlob( grpc::ClientContext context; return stub_->SpliceBlob(&context, request, &response); }, + RetryConfig::Instance(), logger_); if (not ok) { LogStatus(&logger_, LogLevel::Error, status, "SpliceBlob"); @@ -442,6 +446,7 @@ auto BazelCasClient::FindMissingBlobs(std::string const& instance_name, return stub_->FindMissingBlobs( &context, request, &response); }, + RetryConfig::Instance(), logger_); if (ok) { auto batch = @@ -532,6 +537,7 @@ auto BazelCasClient::BatchUpdateBlobs( [&request, &batch_update_blobs]() { return batch_update_blobs(request); }, + RetryConfig::Instance(), logger_); })) { logger_.Emit(LogLevel::Error, "Failed to BatchUpdateBlobs."); diff --git a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp index 51ee1869..a6ab3087 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp @@ -19,6 +19,7 @@ #include "grpcpp/grpcpp.h" #include "src/buildtool/common/remote/client_common.hpp" #include "src/buildtool/common/remote/retry.hpp" +#include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/logging/log_level.hpp" namespace bazel_re = build::bazel::remote::execution::v2; @@ -103,7 +104,7 @@ auto BazelExecutionClient::Execute(std::string const& instance_name, response.state != ExecutionResponse::State::Retry, .error_msg = contents.error_msg}; }; - if (not WithRetry(execute, logger_)) { + if (not WithRetry(execute, RetryConfig::Instance(), logger_)) { logger_.Emit(LogLevel::Error, "Failed to execute action {}.", action_digest.ShortDebugString()); @@ -139,7 +140,7 @@ auto BazelExecutionClient::WaitExecution(std::string const& execution_handle) response.state != ExecutionResponse::State::Retry, .error_msg = contents.error_msg}; }; - if (not WithRetry(wait_execution, logger_)) { + if (not WithRetry(wait_execution, RetryConfig::Instance(), logger_)) { logger_.Emit( LogLevel::Error, "Failed to Execute action {}.", request.name()); } |