summaryrefslogtreecommitdiff
path: root/src/buildtool/serve_api/serve_service/target.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/serve_api/serve_service/target.cpp')
-rw-r--r--src/buildtool/serve_api/serve_service/target.cpp97
1 files changed, 51 insertions, 46 deletions
diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp
index e358b79e..9f54f7c3 100644
--- a/src/buildtool/serve_api/serve_service/target.cpp
+++ b/src/buildtool/serve_api/serve_service/target.cpp
@@ -97,7 +97,7 @@ auto TargetService::HandleFailureLog(
if (not digest) {
auto msg = fmt::format("Failed to store log of failed {} to local CAS",
failure_scope);
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
// upload log blob to remote
@@ -109,7 +109,7 @@ auto TargetService::HandleFailureLog(
fmt::format("Failed to upload to remote CAS the failed {} log {}",
failure_scope,
digest->hash());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::UNAVAILABLE, msg};
}
// set response with log digest
@@ -123,7 +123,7 @@ auto TargetService::ServeTarget(
::justbuild::just_serve::ServeTargetResponse* response) -> ::grpc::Status {
// check target cache key hash for validity
if (auto msg = IsAHash(request->target_cache_key_id().hash()); msg) {
- logger_->Emit(LogLevel::Error, *msg);
+ logger_->Emit(LogLevel::Error, "{}", *msg);
return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *msg};
}
auto const& target_cache_key_digest =
@@ -153,14 +153,14 @@ auto TargetService::ServeTarget(
// read in the dispatch list and add it to the description, if not empty
if (auto msg = IsAHash(request->dispatch_info().hash()); msg) {
- logger_->Emit(LogLevel::Error, *msg);
+ logger_->Emit(LogLevel::Error, "{}", *msg);
return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *msg};
}
auto const& dispatch_info_digest = ArtifactDigest{request->dispatch_info()};
auto res = GetDispatchList(dispatch_info_digest);
if (res.index() == 0) {
auto err = std::get<0>(res);
- logger_->Emit(LogLevel::Error, err.error_message());
+ logger_->Emit(LogLevel::Error, "{}", err.error_message());
return err;
}
// keep dispatch list, as it needs to be passed to the executor (via the
@@ -176,10 +176,9 @@ auto TargetService::ServeTarget(
dispatch_json.push_back(entry);
}
} catch (std::exception const& ex) {
- logger_->Emit(
- LogLevel::Info,
- fmt::format("Parsing dispatch list to JSON failed with:\n{}",
- ex.what()));
+ logger_->Emit(LogLevel::Info,
+ "Parsing dispatch list to JSON failed with:\n{}",
+ ex.what());
}
if (not dispatch_json.empty()) {
description["endpoint dispatch list"] = std::move(dispatch_json);
@@ -228,7 +227,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format(
"Failed to extract artifacts from target cache entry {}",
target_entry->second.ToString());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
artifacts.emplace_back(target_entry->second); // add the tc value
@@ -237,7 +236,7 @@ auto TargetService::ServeTarget(
"Failed to upload to remote cas the artifacts referenced in "
"the target cache entry {}",
target_entry->second.ToString());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::UNAVAILABLE, msg};
}
// populate response with the target cache value
@@ -254,7 +253,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format(
"Could not retrieve blob {} from remote-execution endpoint",
target_cache_key_info.ToString());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg};
}
@@ -265,7 +264,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format(
"Unexpected failure in retrieving blob {} from local CAS",
target_cache_key_info.ToString());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
@@ -277,7 +276,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format("Parsing TargetCacheKey {} failed with:\n{}",
target_cache_key_digest.hash(),
ex.what());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
if (not target_description_dict.IsNotNull() or
@@ -286,7 +285,7 @@ auto TargetService::ServeTarget(
fmt::format("TargetCacheKey {} should contain a map, but found {}",
target_cache_key_digest.hash(),
target_description_dict.ToJson().dump());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::NOT_FOUND, msg};
}
@@ -302,7 +301,7 @@ auto TargetService::ServeTarget(
fmt::format("TargetCacheKey {} does not contain key \"{}\"",
target_cache_key_digest.hash(),
key);
- logger_->Emit(LogLevel::Error, error_msg);
+ logger_->Emit(LogLevel::Error, "{}", error_msg);
return false;
}
return true;
@@ -322,7 +321,7 @@ auto TargetService::ServeTarget(
"found {}",
target_cache_key_digest.hash(),
repo_key.ToJson().dump());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::NOT_FOUND, msg};
}
ArtifactDigest repo_key_dgst{repo_key->String(), 0, /*is_tree=*/false};
@@ -334,7 +333,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format(
"Could not retrieve blob {} from remote-execution endpoint",
repo_key->String());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg};
}
auto repo_config_path = Storage::Instance().CAS().BlobPath(
@@ -344,7 +343,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format(
"Unexpected failure in retrieving blob {} from local CAS",
repo_key->String());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
@@ -353,7 +352,7 @@ auto TargetService::ServeTarget(
std::string const main_repo{"0"}; // known predefined main repository name
if (auto msg = DetermineRoots(
main_repo, *repo_config_path, &repository_config, logger_)) {
- logger_->Emit(LogLevel::Error, *msg);
+ logger_->Emit(LogLevel::Error, "{}", *msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, *msg};
}
@@ -366,7 +365,7 @@ auto TargetService::ServeTarget(
" found {}",
target_cache_key_digest.hash(),
target_expr.ToJson().dump());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg};
}
auto target_name = nlohmann::json::object();
@@ -377,7 +376,7 @@ auto TargetService::ServeTarget(
"TargetCacheKey {}: parsing \"target_name\" failed with:\n{}",
target_cache_key_digest.hash(),
ex.what());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg};
}
@@ -390,7 +389,7 @@ auto TargetService::ServeTarget(
" but found {}",
target_cache_key_digest.hash(),
config_expr.ToJson().dump());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg};
}
Configuration config{};
@@ -402,7 +401,7 @@ auto TargetService::ServeTarget(
"TargetCacheKey {}: parsing \"effective_config\" failed with:\n{}",
target_cache_key_digest.hash(),
ex.what());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg};
}
@@ -418,7 +417,7 @@ auto TargetService::ServeTarget(
parse_err);
});
if (not entity) {
- logger_->Emit(LogLevel::Error, error_msg);
+ logger_->Emit(LogLevel::Error, "{}", error_msg);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION,
error_msg};
}
@@ -456,7 +455,7 @@ auto TargetService::ServeTarget(
// report failure locally, to keep track of it...
auto msg = fmt::format("Failed to analyse target {}",
configured_target.target.ToString());
- logger_->Emit(LogLevel::Warning, msg);
+ logger_->Emit(LogLevel::Warning, "{}", msg);
return HandleFailureLog(tmp_log, "analysis", response);
}
logger_->Emit(LogLevel::Info, "Analysed target {}", result->id.ToString());
@@ -505,9 +504,9 @@ auto TargetService::ServeTarget(
if (not build_result) {
// report failure locally, to keep track of it...
- auto msg = fmt::format("Build for target {} failed",
- configured_target.target.ToString());
- logger_->Emit(LogLevel::Warning, msg);
+ logger_->Emit(LogLevel::Warning,
+ "Build for target {} failed",
+ configured_target.target.ToString());
return HandleFailureLog(tmp_log, "build", response);
}
@@ -523,10 +522,9 @@ auto TargetService::ServeTarget(
if (build_result->failed_artifacts) {
// report failure locally, to keep track of it...
- auto msg =
- fmt::format("Build result for target {} contains failed artifacts ",
- configured_target.target.ToString());
- logger_->Emit(LogLevel::Warning, msg);
+ logger_->Emit(LogLevel::Warning,
+ "Build result for target {} contains failed artifacts ",
+ configured_target.target.ToString());
return HandleFailureLog(tmp_log, "artifacts", response);
}
@@ -540,7 +538,7 @@ auto TargetService::ServeTarget(
auto msg = fmt::format(
"Failed to extract artifacts from target cache entry {}",
target_entry->second.ToString());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
tc_artifacts.emplace_back(target_entry->second); // add the tc value
@@ -549,7 +547,7 @@ auto TargetService::ServeTarget(
"Failed to upload to remote cas the artifacts referenced in "
"the target cache entry {}",
target_entry->second.ToString());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::UNAVAILABLE, msg};
}
// populate response with the target cache value
@@ -560,7 +558,7 @@ auto TargetService::ServeTarget(
// target cache value missing -- internally something is very wrong
auto msg = fmt::format("Failed to read TargetCacheKey {} after store",
target_cache_key_digest.hash());
- logger_->Emit(LogLevel::Error, msg);
+ logger_->Emit(LogLevel::Error, "{}", msg);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg};
}
@@ -645,7 +643,7 @@ auto TargetService::ServeTargetVariables(
fmt::format("Targets file {} should contain a map, but found:\n{}",
target_file,
map->ToString());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
// do validity checks (target present, is export, flexible_config valid)
@@ -655,6 +653,7 @@ auto TargetService::ServeTargetVariables(
auto err = fmt::format("Missing target {} in targets file {}",
nlohmann::json(target).dump(),
target_file);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
auto export_desc = target_desc->get()->At("type");
@@ -663,7 +662,7 @@ auto TargetService::ServeTargetVariables(
"Missing \"type\" field for target {} in targets file {}.",
nlohmann::json(target).dump(),
target_file);
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
if (not export_desc->get()->IsString()) {
@@ -673,7 +672,7 @@ auto TargetService::ServeTargetVariables(
nlohmann::json(target).dump(),
target_file,
export_desc->get()->ToString());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
if (export_desc->get()->String() != "export") {
@@ -694,7 +693,7 @@ auto TargetService::ServeTargetVariables(
nlohmann::json(target).dump(),
target_file,
flexible_config->get()->ToString());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
// populate response with flexible_config list
@@ -707,7 +706,7 @@ auto TargetService::ServeTargetVariables(
nlohmann::json(target).dump(),
target_file,
elem->ToString());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
response->clear_flexible_config(); // must be unset
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
@@ -740,6 +739,7 @@ auto TargetService::ServeTargetDescription(
"{}",
root_tree,
target_file);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION,
err};
}
@@ -760,6 +760,7 @@ auto TargetService::ServeTargetDescription(
"targets file {}",
root_tree,
target_file);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{
::grpc::StatusCode::FAILED_PRECONDITION, err};
}
@@ -775,10 +776,12 @@ auto TargetService::ServeTargetDescription(
// something went wrong trying to read the target file blob
auto err =
fmt::format("Could not read targets file {}", target_file);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::INTERNAL, err};
}
// tree not found
auto err = fmt::format("Missing target-root tree {}", root_tree);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
// parse target file as json
@@ -790,7 +793,7 @@ auto TargetService::ServeTargetDescription(
"Failed to parse targets file {} as json with error:\n{}",
target_file,
e.what());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
if (not map->IsMap()) {
@@ -798,7 +801,7 @@ auto TargetService::ServeTargetDescription(
fmt::format("Targets file {} should contain a map, but found:\n{}",
target_file,
map->ToString());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
// do validity checks (target is present and is of "type": "export")
@@ -808,6 +811,7 @@ auto TargetService::ServeTargetDescription(
auto err = fmt::format("Missing target {} in targets file {}",
nlohmann::json(target).dump(),
target_file);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
auto export_desc = target_desc->get()->At("type");
@@ -816,7 +820,7 @@ auto TargetService::ServeTargetDescription(
"Missing \"type\" field for target {} in targets file {}.",
nlohmann::json(target).dump(),
target_file);
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
if (not export_desc->get()->IsString()) {
@@ -826,13 +830,14 @@ auto TargetService::ServeTargetDescription(
nlohmann::json(target).dump(),
target_file,
export_desc->get()->ToString());
- logger_->Emit(LogLevel::Error, err);
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
if (export_desc->get()->String() != "export") {
// target is not of "type" : "export"
auto err = fmt::format(R"(target {} is not of "type" : "export")",
nlohmann::json(target).dump());
+ logger_->Emit(LogLevel::Error, "{}", err);
return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, err};
}
// populate response description object with fields as-is
@@ -885,7 +890,7 @@ auto TargetService::ServeTargetDescription(
auto error_msg = fmt::format(
"Failed to upload to remote cas the description blob {}",
artifact_dgst.hash());
- logger_->Emit(LogLevel::Error, error_msg);
+ logger_->Emit(LogLevel::Error, "{}", error_msg);
return ::grpc::Status{::grpc::StatusCode::UNAVAILABLE, error_msg};
}