summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-07-16 15:51:24 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-07-19 09:50:37 +0200
commit953fc900629dd2b04c509b4f953e75dd351e09d9 (patch)
tree074258da62e9c2d58cd4998ba9f1ac0e595d1cc8 /src
parent2361355beb80685157b2a0cf6f79c14e010a00de (diff)
downloadjustbuild-953fc900629dd2b04c509b4f953e75dd351e09d9.tar.gz
Pass RetryConfig instance to WithRetry
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/common/remote/TARGETS8
-rw-r--r--src/buildtool/common/remote/retry.cpp11
-rw-r--r--src/buildtool/common/remote/retry.hpp3
-rw-r--r--src/buildtool/execution_api/remote/TARGETS1
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp2
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp6
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp5
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());
}