summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKlaus Aehlig <klaus.aehlig@huawei.com>2024-10-28 12:45:14 +0100
committerKlaus Aehlig <klaus.aehlig@huawei.com>2024-10-28 13:56:46 +0100
commit0c1e4bdebd705bde7c8a03b671c31dcd354aebcd (patch)
treeb685aaa1369f0dc77989192320e7b6687acdc515
parent68e3d9129f84cdfc60aa0bc6efa518a01200bccd (diff)
downloadjustbuild-0c1e4bdebd705bde7c8a03b671c31dcd354aebcd.tar.gz
WithRetry: Support reduced log level for failures
In some situations, we use a retry strategy, but in case of complete failure have another way of attempting that task. In this case, we should not emmit an error message right away. Add support for this.
-rw-r--r--src/buildtool/common/remote/TARGETS2
-rw-r--r--src/buildtool/common/remote/retry.cpp11
-rw-r--r--src/buildtool/common/remote/retry.hpp9
3 files changed, 14 insertions, 8 deletions
diff --git a/src/buildtool/common/remote/TARGETS b/src/buildtool/common/remote/TARGETS
index 8ca9daa8..e494bd47 100644
--- a/src/buildtool/common/remote/TARGETS
+++ b/src/buildtool/common/remote/TARGETS
@@ -58,9 +58,9 @@
, "deps":
[ "retry_config"
, ["@", "grpc", "", "grpc++"]
+ , ["src/buildtool/logging", "log_level"]
, ["src/buildtool/logging", "logging"]
]
, "stage": ["src", "buildtool", "common", "remote"]
- , "private-deps": [["src/buildtool/logging", "log_level"]]
}
}
diff --git a/src/buildtool/common/remote/retry.cpp b/src/buildtool/common/remote/retry.cpp
index 00d275cd..8c97bf38 100644
--- a/src/buildtool/common/remote/retry.cpp
+++ b/src/buildtool/common/remote/retry.cpp
@@ -15,6 +15,7 @@
#include "src/buildtool/common/remote/retry.hpp"
#ifndef BOOTSTRAP_BUILD_TOOL
+#include <algorithm>
#include <chrono>
#include <thread>
@@ -22,7 +23,8 @@
auto WithRetry(CallableReturningRetryResponse const& f,
RetryConfig const& retry_config,
- Logger const& logger) noexcept -> bool {
+ Logger const& logger,
+ LogLevel fatal_log_level) noexcept -> bool {
try {
auto const& attempts = retry_config.GetMaxAttempts();
for (auto attempt = 1U; attempt <= attempts; ++attempt) {
@@ -32,7 +34,7 @@ auto WithRetry(CallableReturningRetryResponse const& f,
}
if (fatal) {
if (error_msg) {
- logger.Emit(LogLevel::Error, "{}", *error_msg);
+ logger.Emit(fatal_log_level, "{}", *error_msg);
}
return false;
}
@@ -51,7 +53,7 @@ auto WithRetry(CallableReturningRetryResponse const& f,
}
else {
if (error_msg) {
- logger.Emit(LogLevel::Error,
+ logger.Emit(fatal_log_level,
"After {} attempts: {}",
attempt,
*error_msg);
@@ -59,7 +61,8 @@ auto WithRetry(CallableReturningRetryResponse const& f,
}
}
} catch (...) {
- logger.Emit(LogLevel::Error, "WithRetry: caught unknown exception");
+ logger.Emit(std::min(fatal_log_level, LogLevel::Warning),
+ "WithRetry: caught unknown exception");
}
return false;
}
diff --git a/src/buildtool/common/remote/retry.hpp b/src/buildtool/common/remote/retry.hpp
index 6b8278a4..9387ef2a 100644
--- a/src/buildtool/common/remote/retry.hpp
+++ b/src/buildtool/common/remote/retry.hpp
@@ -24,6 +24,7 @@
#include "grpcpp/grpcpp.h"
#include "src/buildtool/common/remote/retry_config.hpp"
+#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
// Utility class to help detecting when exit the retry loop. This class can be
@@ -51,9 +52,11 @@ using CallableReturningRetryResponse = std::function<RetryResponse(void)>;
/// \brief Calls a function with a retry strategy using a backoff algorithm.
/// 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;
+[[nodiscard]] auto WithRetry(
+ CallableReturningRetryResponse const& f,
+ RetryConfig const& retry_config,
+ Logger const& logger,
+ LogLevel fatal_log_level = LogLevel::Error) noexcept -> bool;
using CallableReturningGrpcStatus = std::function<grpc::Status(void)>;