diff options
Diffstat (limited to 'src')
10 files changed, 432 insertions, 475 deletions
diff --git a/src/buildtool/common/remote/retry.hpp b/src/buildtool/common/remote/retry.hpp index 4e1e3492..0f82a48f 100644 --- a/src/buildtool/common/remote/retry.hpp +++ b/src/buildtool/common/remote/retry.hpp @@ -61,7 +61,7 @@ template <CallableReturningRetryResponse F> } if (fatal) { if (error_msg) { - logger.Emit(LogLevel::Error, *error_msg); + logger.Emit(LogLevel::Error, "{}", *error_msg); } return false; } diff --git a/src/buildtool/execution_api/execution_service/ac_server.cpp b/src/buildtool/execution_api/execution_service/ac_server.cpp index 53000cad..d998bd6d 100644 --- a/src/buildtool/execution_api/execution_service/ac_server.cpp +++ b/src/buildtool/execution_api/execution_service/ac_server.cpp @@ -24,7 +24,7 @@ auto ActionCacheServiceImpl::GetActionResult( const ::bazel_re::GetActionResultRequest* request, ::bazel_re::ActionResult* response) -> ::grpc::Status { if (auto error_msg = IsAHash(request->action_digest().hash()); error_msg) { - logger_.Emit(LogLevel::Debug, *error_msg); + logger_.Emit(LogLevel::Debug, "{}", *error_msg); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg}; } logger_.Emit(LogLevel::Trace, diff --git a/src/buildtool/execution_api/execution_service/bytestream_server.cpp b/src/buildtool/execution_api/execution_service/bytestream_server.cpp index 3433f031..2a4b7e21 100644 --- a/src/buildtool/execution_api/execution_service/bytestream_server.cpp +++ b/src/buildtool/execution_api/execution_service/bytestream_server.cpp @@ -52,12 +52,12 @@ auto BytestreamServiceImpl::Read( auto hash = ParseResourceName(request->resource_name()); if (!hash) { auto str = fmt::format("could not parse {}", request->resource_name()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, str}; } if (auto error_msg = IsAHash(*hash); error_msg) { - logger_.Emit(LogLevel::Debug, *error_msg); + logger_.Emit(LogLevel::Debug, "{}", *error_msg); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg}; } @@ -81,7 +81,7 @@ auto BytestreamServiceImpl::Read( } if (!path) { auto str = fmt::format("could not find {}", *hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{::grpc::StatusCode::NOT_FOUND, str}; } std::ifstream blob{*path}; @@ -113,11 +113,11 @@ auto BytestreamServiceImpl::Write( auto hash = ParseResourceName(request.resource_name()); if (!hash) { auto str = fmt::format("could not parse {}", request.resource_name()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, str}; } if (auto error_msg = IsAHash(*hash); error_msg) { - logger_.Emit(LogLevel::Debug, *error_msg); + logger_.Emit(LogLevel::Debug, "{}", *error_msg); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg}; } logger_.Emit(LogLevel::Trace, @@ -150,7 +150,7 @@ auto BytestreamServiceImpl::Write( if (NativeSupport::IsTree(*hash)) { if (not storage_->CAS().StoreTree</*kOwner=*/true>(tmp)) { auto str = fmt::format("could not store tree {}", *hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, str}; } } @@ -158,7 +158,7 @@ auto BytestreamServiceImpl::Write( if (not storage_->CAS().StoreBlob</*kOwner=*/true>( tmp, /*is_executable=*/false)) { auto str = fmt::format("could not store blob {}", *hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, str}; } } @@ -173,6 +173,6 @@ auto BytestreamServiceImpl::QueryWriteStatus( ::google::bytestream::QueryWriteStatusResponse* /*response*/) -> ::grpc::Status { auto const* str = "QueryWriteStatus not implemented"; - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::UNIMPLEMENTED, str}; } diff --git a/src/buildtool/execution_api/execution_service/cas_server.cpp b/src/buildtool/execution_api/execution_service/cas_server.cpp index b9143daa..89597a38 100644 --- a/src/buildtool/execution_api/execution_service/cas_server.cpp +++ b/src/buildtool/execution_api/execution_service/cas_server.cpp @@ -109,7 +109,7 @@ auto CASServiceImpl::CheckDigestConsistency(bazel_re::Digest const& ref, ref.size_bytes(), computed.size_bytes(), computed.size_bytes()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return str; } return std::nullopt; @@ -132,7 +132,7 @@ auto CASServiceImpl::BatchUpdateBlobs( if (!IsValidHash(hash)) { auto const& str = fmt::format("BatchUpdateBlobs: unsupported digest {}", hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INVALID_ARGUMENT, str}; } logger_.Emit(LogLevel::Trace, "BatchUpdateBlobs: {}", hash); @@ -144,7 +144,7 @@ auto CASServiceImpl::BatchUpdateBlobs( if (auto err = CASUtils::EnsureTreeInvariant( x.digest(), x.data(), *storage_)) { auto str = fmt::format("BatchUpdateBlobs: {}", *err); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::FAILED_PRECONDITION, str}; } @@ -152,12 +152,12 @@ auto CASServiceImpl::BatchUpdateBlobs( if (!dgst) { auto const& str = fmt::format( "BatchUpdateBlobs: could not upload tree {}", hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INTERNAL, str}; } if (auto err = CheckDigestConsistency(x.digest(), *dgst)) { auto str = fmt::format("BatchUpdateBlobs: {}", *err); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INVALID_ARGUMENT, str}; } } @@ -166,12 +166,12 @@ auto CASServiceImpl::BatchUpdateBlobs( if (!dgst) { auto const& str = fmt::format( "BatchUpdateBlobs: could not upload blob {}", hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INTERNAL, str}; } if (auto err = CheckDigestConsistency(x.digest(), *dgst)) { auto str = fmt::format("BatchUpdateBlobs: {}", *err); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INVALID_ARGUMENT, str}; } } @@ -186,7 +186,7 @@ auto CASServiceImpl::BatchReadBlobs( auto lock = GarbageCollector::SharedLock(); if (!lock) { auto str = fmt::format("BatchReadBlobs: Could not acquire SharedLock"); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return grpc::Status{grpc::StatusCode::INTERNAL, str}; } for (auto const& digest : request->digests()) { @@ -240,7 +240,7 @@ auto CASServiceImpl::SplitBlob(::grpc::ServerContext* /*context*/, if (not IsValidHash(blob_digest.hash())) { auto str = fmt::format("SplitBlob: unsupported digest {}", blob_digest.hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INVALID_ARGUMENT, str}; } @@ -255,14 +255,13 @@ auto CASServiceImpl::SplitBlob(::grpc::ServerContext* /*context*/, ChunkingAlgorithm_Value_IDENTITY and chunking_algorithm != ::bazel_re::ChunkingAlgorithm_Value:: ChunkingAlgorithm_Value_FASTCDC) { - logger_.Emit(LogLevel::Warning, - fmt::format("SplitBlob: unsupported chunking algorithm " - "{}, will use " - "default implementation {}", - ChunkingAlgorithmToString(chunking_algorithm), - ChunkingAlgorithmToString( - ::bazel_re::ChunkingAlgorithm_Value:: - ChunkingAlgorithm_Value_FASTCDC))); + logger_.Emit( + LogLevel::Warning, + "SplitBlob: unsupported chunking algorithm {}, will use default " + "implementation {}", + ChunkingAlgorithmToString(chunking_algorithm), + ChunkingAlgorithmToString(::bazel_re::ChunkingAlgorithm_Value:: + ChunkingAlgorithm_Value_FASTCDC)); } // Acquire garbage collection lock. @@ -284,7 +283,7 @@ auto CASServiceImpl::SplitBlob(::grpc::ServerContext* /*context*/, if (std::holds_alternative<grpc::Status>(split_result)) { auto status = std::get<grpc::Status>(split_result); auto str = fmt::format("SplitBlob: {}", status.error_message()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{status.error_code(), str}; } @@ -322,7 +321,7 @@ auto CASServiceImpl::SpliceBlob(::grpc::ServerContext* /*context*/, if (not IsValidHash(blob_digest.hash())) { auto str = fmt::format("SpliceBlob: unsupported digest {}", blob_digest.hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INVALID_ARGUMENT, str}; } @@ -350,13 +349,13 @@ auto CASServiceImpl::SpliceBlob(::grpc::ServerContext* /*context*/, if (std::holds_alternative<grpc::Status>(splice_result)) { auto status = std::get<grpc::Status>(splice_result); auto str = fmt::format("SpliceBlob: {}", status.error_message()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{status.error_code(), str}; } auto digest = std::get<bazel_re::Digest>(splice_result); if (auto err = CheckDigestConsistency(blob_digest, digest)) { auto str = fmt::format("SpliceBlob: {}", *err); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INVALID_ARGUMENT, str}; } response->mutable_blob_digest()->CopyFrom(digest); diff --git a/src/buildtool/execution_api/execution_service/execution_server.cpp b/src/buildtool/execution_api/execution_service/execution_server.cpp index f122da81..c3802ea7 100644 --- a/src/buildtool/execution_api/execution_service/execution_server.cpp +++ b/src/buildtool/execution_api/execution_service/execution_server.cpp @@ -42,14 +42,14 @@ auto ExecutionServiceImpl::GetAction(::bazel_re::ExecuteRequest const* request) std::optional<std::string>> { // get action description if (auto error_msg = IsAHash(request->action_digest().hash()); error_msg) { - logger_.Emit(LogLevel::Error, *error_msg); + logger_.Emit(LogLevel::Error, "{}", *error_msg); return {std::nullopt, *error_msg}; } auto path = storage_->CAS().BlobPath(request->action_digest(), false); if (!path) { auto str = fmt::format("could not retrieve blob {} from cas", request->action_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return {std::nullopt, str}; } ::bazel_re::Action action{}; @@ -58,13 +58,13 @@ auto ExecutionServiceImpl::GetAction(::bazel_re::ExecuteRequest const* request) if (!action.ParseFromIstream(&f)) { auto str = fmt::format("failed to parse action from blob {}", request->action_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return {std::nullopt, str}; } } if (auto error_msg = IsAHash(action.input_root_digest().hash()); error_msg) { - logger_.Emit(LogLevel::Error, *error_msg); + logger_.Emit(LogLevel::Error, "{}", *error_msg); return {std::nullopt, *error_msg}; } path = Compatibility::IsCompatible() @@ -74,7 +74,7 @@ auto ExecutionServiceImpl::GetAction(::bazel_re::ExecuteRequest const* request) if (!path) { auto str = fmt::format("could not retrieve input root {} from cas", action.input_root_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return {std::nullopt, str}; } return {std::move(action), std::nullopt}; @@ -84,14 +84,14 @@ auto ExecutionServiceImpl::GetCommand(::bazel_re::Action const& action) const noexcept -> std::pair<std::optional<::bazel_re::Command>, std::optional<std::string>> { if (auto error_msg = IsAHash(action.command_digest().hash()); error_msg) { - logger_.Emit(LogLevel::Error, *error_msg); + logger_.Emit(LogLevel::Error, "{}", *error_msg); return {std::nullopt, *error_msg}; } auto path = storage_->CAS().BlobPath(action.command_digest(), false); if (!path) { auto str = fmt::format("could not retrieve blob {} from cas", action.command_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return {std::nullopt, str}; } @@ -101,7 +101,7 @@ auto ExecutionServiceImpl::GetCommand(::bazel_re::Action const& action) if (!c.ParseFromIstream(&f)) { auto str = fmt::format("failed to parse command from blob {}", action.command_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return {std::nullopt, str}; } } @@ -143,7 +143,7 @@ auto ExecutionServiceImpl::GetIExecutionAction( if (!i_execution_action) { auto str = fmt::format("could not create action from {}", request->action_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return {std::nullopt, str}; } i_execution_action->SetCacheFlag( @@ -357,7 +357,7 @@ auto ExecutionServiceImpl::AddResult( if (not AddOutputPaths(response, i_execution_response, *storage_)) { auto str = fmt::format("Error in creating output paths of action {}", action_hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return std::nullopt; } auto* result = response->mutable_result(); @@ -368,7 +368,7 @@ auto ExecutionServiceImpl::AddResult( if (!dgst) { auto str = fmt::format("Could not store stderr of action {}", action_hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return str; } result->mutable_stderr_digest()->CopyFrom(*dgst); @@ -379,7 +379,7 @@ auto ExecutionServiceImpl::AddResult( if (!dgst) { auto str = fmt::format("Could not store stdout of action {}", action_hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return str; } result->mutable_stdout_digest()->CopyFrom(*dgst); @@ -422,7 +422,7 @@ auto ExecutionServiceImpl::StoreActionResult( execute_response.result())) { auto str = fmt::format("Could not store action result for action {}", request->action_digest().hash()); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return str; } return std::nullopt; @@ -501,7 +501,7 @@ auto ExecutionServiceImpl::WaitExecution( -> ::grpc::Status { auto const& hash = request->name(); if (auto error_msg = IsAHash(hash); error_msg) { - logger_.Emit(LogLevel::Error, *error_msg); + logger_.Emit(LogLevel::Error, "{}", *error_msg); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg}; } logger_.Emit(LogLevel::Trace, "WaitExecution: {}", hash); @@ -511,7 +511,7 @@ auto ExecutionServiceImpl::WaitExecution( if (!op) { auto const& str = fmt::format( "Executing action {} not found in internal cache.", hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INTERNAL, str}; } std::this_thread::sleep_for(std::chrono::seconds(1)); diff --git a/src/buildtool/execution_api/execution_service/operations_server.cpp b/src/buildtool/execution_api/execution_service/operations_server.cpp index 13a8efd6..6e082bf4 100644 --- a/src/buildtool/execution_api/execution_service/operations_server.cpp +++ b/src/buildtool/execution_api/execution_service/operations_server.cpp @@ -24,7 +24,7 @@ auto OperarationsServiceImpl::GetOperation( ::google::longrunning::Operation* response) -> ::grpc::Status { auto const& hash = request->name(); if (auto error_msg = IsAHash(hash); error_msg) { - logger_.Emit(LogLevel::Debug, *error_msg); + logger_.Emit(LogLevel::Debug, "{}", *error_msg); return ::grpc::Status{::grpc::StatusCode::INVALID_ARGUMENT, *error_msg}; } logger_.Emit(LogLevel::Trace, "GetOperation: {}", hash); @@ -33,7 +33,7 @@ auto OperarationsServiceImpl::GetOperation( if (!op) { auto const& str = fmt::format( "Executing action {} not found in internal cache.", hash); - logger_.Emit(LogLevel::Error, str); + logger_.Emit(LogLevel::Error, "{}", str); return ::grpc::Status{grpc::StatusCode::INTERNAL, str}; } response->CopyFrom(*op); 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 7ae20693..323b7dc4 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp @@ -38,8 +38,8 @@ void LogExecutionStatus(gsl::not_null<Logger const*> const& logger, // (and the server does not support a queue), the action could not // be started. The client should retry. logger->Emit(LogLevel::Debug, - fmt::format("Execution could not be started.\n{}", - s.ShortDebugString())); + "Execution could not be started.\n{}", + s.ShortDebugString()); break; default: // fallback to default status logging diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp index e1e8ae57..c152773f 100644 --- a/src/buildtool/serve_api/serve_service/source_tree.cpp +++ b/src/buildtool/serve_api/serve_service/source_tree.cpp @@ -109,14 +109,13 @@ auto SourceTreeService::GetSubtreeFromCommit( [logger, repo_path, commit, subdir](auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( - "While retrieving subtree {} of commit {} from " - "repository {}:\n{}", - subdir, - commit, - repo_path.string(), - msg); - logger->Emit(LogLevel::Debug, err); + logger->Emit(LogLevel::Debug, + "While retrieving subtree {} of commit {} " + "from repository {}:\n{}", + subdir, + commit, + repo_path.string(), + msg); } }); return repo->GetSubtreeFromCommit(commit, subdir, wrapped_logger); @@ -137,14 +136,13 @@ auto SourceTreeService::GetSubtreeFromTree( [logger, repo_path, tree_id, subdir](auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( - "While retrieving subtree {} of tree {} from " - "repository {}:\n{}", - subdir, - tree_id, - repo_path.string(), - msg); - logger->Emit(LogLevel::Debug, err); + logger->Emit(LogLevel::Debug, + "While retrieving subtree {} of tree {} " + "from repository {}:\n{}", + subdir, + tree_id, + repo_path.string(), + msg); } }); if (auto subtree_id = @@ -167,13 +165,12 @@ auto SourceTreeService::GetBlobFromRepo(std::filesystem::path const& repo_path, auto wrapped_logger = std::make_shared<GitRepo::anon_logger_t>( [logger, repo_path, blob_id](auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( - "While checking existence of blob {} in repository " - "{}:\n{}", - blob_id, - repo_path.string(), - msg); - logger->Emit(LogLevel::Debug, err); + logger->Emit(LogLevel::Debug, + "While checking existence of blob {} in " + "repository {}:\n{}", + blob_id, + repo_path.string(), + msg); } }); auto res = repo->TryReadBlob(blob_id, wrapped_logger); @@ -181,10 +178,10 @@ auto SourceTreeService::GetBlobFromRepo(std::filesystem::path const& repo_path, return true; // fatal failure } if (not res.second) { - auto str = fmt::format("Blob {} not found in repository {}", - blob_id, - repo_path.string()); - logger->Emit(LogLevel::Debug, str); + logger->Emit(LogLevel::Debug, + "Blob {} not found in repository {}", + blob_id, + repo_path.string()); return false; // non-fatal failure } return res.second.value(); @@ -192,8 +189,7 @@ auto SourceTreeService::GetBlobFromRepo(std::filesystem::path const& repo_path, } // failed to open repository logger->Emit( - LogLevel::Debug, - fmt::format("Failed to open repository {}", repo_path.string())); + LogLevel::Debug, "Failed to open repository {}", repo_path.string()); return true; // fatal failure } @@ -211,11 +207,10 @@ auto SourceTreeService::ServeCommitTree( if (request->sync_tree()) { // sync tree with remote CAS; only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from local Git cache with the remote " - "in compatible mode", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from local Git cache with " + "the remote in compatible mode", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeCommitTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -223,9 +218,9 @@ auto SourceTreeService::ServeCommitTree( auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(StorageConfig::GitRoot())) { - auto str = fmt::format("Failed to SetGitCAS at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeCommitTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -234,9 +229,9 @@ auto SourceTreeService::ServeCommitTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format( - "Failed to sync tree {} from local Git cache", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from local Git cache", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeCommitTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -249,13 +244,12 @@ auto SourceTreeService::ServeCommitTree( } // report fatal failure if (std::get<bool>(res)) { - auto str = fmt::format( - "Failed while retrieving subtree {} of commit {} from repository " - "{}", - subdir, - commit, - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while retrieving subtree {} of commit {} from " + "repository {}", + subdir, + commit, + StorageConfig::GitRoot().string()); response->set_status(ServeCommitTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -267,12 +261,11 @@ auto SourceTreeService::ServeCommitTree( if (request->sync_tree()) { // sync tree with remote CAS; only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from known repository {} with the " - "remote in compatible mode", - tree_id, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from known repository " + "{} with the remote in compatible mode", + tree_id, + path.string()); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeCommitTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -280,9 +273,9 @@ auto SourceTreeService::ServeCommitTree( auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(path)) { - auto str = - fmt::format("Failed to SetGitCAS at {}", path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + path.string()); response->set_status( ServeCommitTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -292,11 +285,11 @@ auto SourceTreeService::ServeCommitTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Failed to sync tree {} from known repository {}", tree_id, path.string()); - logger_->Emit(LogLevel::Error, str); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeCommitTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -309,13 +302,12 @@ auto SourceTreeService::ServeCommitTree( } // report fatal failure if (std::get<bool>(res)) { - auto str = fmt::format( - "Failed while retrieving subtree {} of commit {} from " - "repository {}", - subdir, - commit, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while retrieving subtree {} of commit {} " + "from repository {}", + subdir, + commit, + path.string()); response->set_status(ServeCommitTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -333,12 +325,11 @@ auto SourceTreeService::SyncArchive(std::string const& tree_id, if (sync_tree) { // sync tree with remote CAS; only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from known repository {} with the remote " - "in compatible mode", - tree_id, - repo_path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from known repository {} with " + "the remote in compatible mode", + tree_id, + repo_path.string()); *(response->mutable_tree()) = tree_id; response->set_status(ServeArchiveTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -346,9 +337,9 @@ auto SourceTreeService::SyncArchive(std::string const& tree_id, auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(repo_path)) { - auto str = - fmt::format("Failed to SetGitCAS at {}", repo_path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + repo_path.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -357,10 +348,10 @@ auto SourceTreeService::SyncArchive(std::string const& tree_id, {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format("Failed to sync tree {} from repository {}", - tree_id, - repo_path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from repository {}", + tree_id, + repo_path.string()); *(response->mutable_tree()) = tree_id; response->set_status(ServeArchiveTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -387,10 +378,9 @@ auto SourceTreeService::ResolveContentTree( // read resolved tree id auto resolved_tree_id = FileSystemManager::ReadFile(tree_id_file); if (not resolved_tree_id) { - auto str = - fmt::format("Failed to read resolved tree id from file {}", - tree_id_file.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to read resolved tree id from file {}", + tree_id_file.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -400,9 +390,9 @@ auto SourceTreeService::ResolveContentTree( // resolve tree; target repository is always the Git cache auto target_cas = GitCAS::Open(StorageConfig::GitRoot()); if (not target_cas) { - auto str = fmt::format("Failed to open Git ODB at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open Git ODB at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -410,9 +400,9 @@ auto SourceTreeService::ResolveContentTree( if (not repo_is_git_cache) { source_cas = GitCAS::Open(repo_path); if (not source_cas) { - auto str = fmt::format("Failed to open Git ODB at {}", - repo_path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open Git ODB at {}", + repo_path.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -440,8 +430,8 @@ auto SourceTreeService::ResolveContentTree( }); } if (failed) { - auto str = fmt::format("Failed to resolve tree id {}", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit( + LogLevel::Error, "Failed to resolve tree id {}", tree_id); response->set_status(ServeArchiveTreeResponse::RESOLVE_ERROR); return ::grpc::Status::OK; } @@ -450,9 +440,10 @@ auto SourceTreeService::ResolveContentTree( fmt::format("resolving Git tree {}", tree_id), resolve_symlinks_map_, kGitObjectToResolvePrinter)) { - auto str = fmt::format( - "Failed to resolve symlinks in tree {}:\n{}", tree_id, *error); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to resolve symlinks in tree {}:\n{}", + tree_id, + *error); response->set_status(ServeArchiveTreeResponse::RESOLVE_ERROR); return ::grpc::Status::OK; } @@ -461,11 +452,10 @@ auto SourceTreeService::ResolveContentTree( [logger = logger_, resolved_tree](auto const& msg, bool fatal) { if (fatal) { logger->Emit(LogLevel::Error, - fmt::format("While keeping tree {} in " - "repository {}:\n{}", - resolved_tree.id, - StorageConfig::GitRoot().string(), - msg)); + "While keeping tree {} in repository {}:\n{}", + resolved_tree.id, + StorageConfig::GitRoot().string(), + msg); } }); { @@ -474,9 +464,9 @@ auto SourceTreeService::ResolveContentTree( // open real repository at Git CAS location auto git_repo = GitRepo::Open(StorageConfig::GitRoot()); if (not git_repo) { - auto str = fmt::format("Failed to open Git CAS repository {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open Git CAS repository {}", + StorageConfig::GitRoot().string()); response->set_status(ServeArchiveTreeResponse::RESOLVE_ERROR); return ::grpc::Status::OK; } @@ -490,10 +480,9 @@ auto SourceTreeService::ResolveContentTree( } // cache the resolved tree association if (not StorageUtils::WriteTreeIDFile(tree_id_file, resolved_tree.id)) { - auto str = - fmt::format("Failed to write resolved tree id to file {}", - tree_id_file.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to write resolved tree id to file {}", + tree_id_file.string()); response->set_status(ServeArchiveTreeResponse::RESOLVE_ERROR); return ::grpc::Status::OK; } @@ -628,33 +617,33 @@ auto SourceTreeService::ArchiveImportToGit( auto res = CommonImportToGit(unpack_path, commit_message); if (res.index() == 0) { // report the error - logger_->Emit(LogLevel::Error, std::get<0>(res)); + logger_->Emit(LogLevel::Error, "{}", std::get<0>(res)); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } auto const& tree_id = std::get<1>(res); // write to tree id file if (not StorageUtils::WriteTreeIDFile(archive_tree_id_file, tree_id)) { - auto str = fmt::format("Failed to write tree id to file {}", - archive_tree_id_file.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to write tree id to file {}", + archive_tree_id_file.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } // open the Git CAS repo auto just_git_cas = GitCAS::Open(StorageConfig::GitRoot()); if (not just_git_cas) { - auto str = fmt::format("Failed to open Git ODB at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open Git ODB at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } auto just_git_repo = GitRepo::Open(just_git_cas); if (not just_git_repo) { - auto str = fmt::format("Failed to open Git repository {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open Git repository {}", + StorageConfig::GitRoot().string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -673,7 +662,7 @@ auto SourceTreeService::ArchiveImportToGit( auto subtree_id = just_git_repo->GetSubtreeFromTree(tree_id, subdir, wrapped_logger); if (not subtree_id) { - logger_->Emit(LogLevel::Error, err); + logger_->Emit(LogLevel::Error, "{}", err); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -695,13 +684,12 @@ auto SourceTreeService::IsTreeInRepo(std::string const& tree_id, auto wrapped_logger = std::make_shared<GitRepo::anon_logger_t>( [logger, repo_path, tree_id](auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( - "While checking existence of tree {} in repository " - "{}:\n{}", - tree_id, - repo_path.string(), - msg); - logger->Emit(LogLevel::Debug, err); + logger->Emit(LogLevel::Debug, + "While checking existence of tree {} in " + "repository {}:\n{}", + tree_id, + repo_path.string(), + msg); } }); return repo->CheckTreeExists(tree_id, wrapped_logger); @@ -709,8 +697,7 @@ auto SourceTreeService::IsTreeInRepo(std::string const& tree_id, } // failed to open repository logger->Emit( - LogLevel::Debug, - fmt::format("Failed to open repository {}", repo_path.string())); + LogLevel::Debug, "Failed to open repository {}", repo_path.string()); return std::nullopt; } @@ -732,9 +719,9 @@ auto SourceTreeService::ServeArchiveTree( auto archive_tree_id = FileSystemManager::ReadFile(archive_tree_id_file); if (not archive_tree_id) { - auto str = fmt::format("Failed to read tree id from file {}", - archive_tree_id_file.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to read tree id from file {}", + archive_tree_id_file.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -751,9 +738,9 @@ auto SourceTreeService::ServeArchiveTree( } // check for fatal error if (std::get<bool>(res)) { - auto str = fmt::format("Failed to open repository {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open repository {}", + StorageConfig::GitRoot().string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -772,27 +759,25 @@ auto SourceTreeService::ServeArchiveTree( } // check for fatal error if (std::get<bool>(res)) { - auto str = - fmt::format("Failed to open repository {}", path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to open repository {}", + path.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } } // report error for missing tree specified in id file - auto str = - fmt::format("Failed while retrieving subtree {} of known tree {}", - subdir, - *archive_tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while retrieving subtree {} of known tree {}", + subdir, + *archive_tree_id); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } // acquire lock for CAS auto lock = GarbageCollector::SharedLock(); if (!lock) { - auto str = fmt::format("Could not acquire gc SharedLock"); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Could not acquire gc SharedLock"); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -810,11 +795,11 @@ auto SourceTreeService::ServeArchiveTree( StorageUtils::AddToCAS(std::get<std::string>(res)); } if (std::get<bool>(res)) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Failed while trying to retrieve content {} from repository {}", content, StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -832,12 +817,11 @@ auto SourceTreeService::ServeArchiveTree( } } if (std::get<bool>(res)) { - auto str = fmt::format( - "Failed while trying to retrieve content {} from " - "repository {}", - content, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while trying to retrieve content {} from " + "repository {}", + content, + path.string()); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -857,9 +841,9 @@ auto SourceTreeService::ServeArchiveTree( // content should now be in CAS content_cas_path = cas.BlobPath(digest, /*is_executable=*/false); if (not content_cas_path) { - auto str = fmt::format( - "Retrieving content {} from CAS failed unexpectedly", content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Retrieving content {} from CAS failed unexpectedly", + content); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -867,21 +851,21 @@ auto SourceTreeService::ServeArchiveTree( // extract archive auto tmp_dir = StorageConfig::CreateTypedTmpDir(archive_type); if (not tmp_dir) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Failed to create tmp path for {} archive with content {}", archive_type, content); - logger_->Emit(LogLevel::Error, str); response->set_status(ServeArchiveTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } auto res = ExtractArchive(*content_cas_path, archive_type, tmp_dir->GetPath()); if (res != std::nullopt) { - auto str = fmt::format("Failed to extract archive {} from CAS:\n{}", - content_cas_path->string(), - *res); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to extract archive {} from CAS:\n{}", + content_cas_path->string(), + *res); response->set_status(ServeArchiveTreeResponse::UNPACK_ERROR); return ::grpc::Status::OK; } @@ -906,9 +890,9 @@ auto SourceTreeService::DistdirImportToGit( // create tmp directory for the distdir auto distdir_tmp_dir = StorageConfig::CreateTypedTmpDir("distdir"); if (not distdir_tmp_dir) { - auto str = fmt::format( - "Failed to create tmp path for distdir target {}", content_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to create tmp path for distdir target {}", + content_id); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -929,9 +913,9 @@ auto SourceTreeService::DistdirImportToGit( } return false; })) { - auto str = - fmt::format("Failed to create links to CAS content {}", content_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to create links to CAS content {}", + content_id); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -940,7 +924,7 @@ auto SourceTreeService::DistdirImportToGit( auto res = CommonImportToGit(tmp_path, commit_message); if (res.index() == 0) { // report the error - logger_->Emit(LogLevel::Error, std::get<0>(res)); + logger_->Emit(LogLevel::Error, "{}", std::get<0>(res)); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -948,12 +932,11 @@ auto SourceTreeService::DistdirImportToGit( // check the committed tree matches what we expect if (tree_id != distdir_tree_id) { // something is very wrong... - auto str = fmt::format( - "Unexpected mismatch for tree of committed distdir:\nexpected {} " - "but got {}", - distdir_tree_id, - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Unexpected mismatch for tree of committed " + "distdir:\nexpected {} but got {}", + distdir_tree_id, + tree_id); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -961,11 +944,10 @@ auto SourceTreeService::DistdirImportToGit( if (sync_tree) { // only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from local Git cache with the remote in " - "compatible mode", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from local Git cache with the " + "remote in compatible mode", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeDistdirTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -973,9 +955,9 @@ auto SourceTreeService::DistdirImportToGit( auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(StorageConfig::GitRoot())) { - auto str = fmt::format("Failed to SetGitCAS at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -984,9 +966,9 @@ auto SourceTreeService::DistdirImportToGit( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = - fmt::format("Failed to sync tree {} from local CAS", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from local CAS", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeDistdirTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -1005,8 +987,7 @@ auto SourceTreeService::ServeDistdirTree( // acquire lock for CAS auto lock = GarbageCollector::SharedLock(); if (!lock) { - auto str = fmt::format("Could not acquire gc SharedLock"); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Could not acquire gc SharedLock"); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1047,11 +1028,10 @@ auto SourceTreeService::ServeDistdirTree( auto stored_blob = cas.StoreBlob(std::get<std::string>(res), kv.executable()); if (not stored_blob) { - auto str = fmt::format( - "Failed to store content {} from local Git cache to " - "local CAS", - content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to store content {} from local Git " + "cache to local CAS", + content); response->set_status( ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -1061,12 +1041,11 @@ auto SourceTreeService::ServeDistdirTree( } else { if (std::get<bool>(res)) { - auto str = fmt::format( - "Failed while trying to retrieve content {} from " - "repository {}", - content, - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while trying to retrieve content {} " + "from repository {}", + content, + StorageConfig::GitRoot().string()); response->set_status( ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -1080,12 +1059,11 @@ auto SourceTreeService::ServeDistdirTree( auto stored_blob = cas.StoreBlob( std::get<std::string>(res), kv.executable()); if (not stored_blob) { - auto str = fmt::format( - "Failed to store content {} from known " - "repository {} to local CAS", - path.string(), - content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to store content {} from " + "known repository {} to local CAS", + path.string(), + content); response->set_status( ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -1096,12 +1074,12 @@ auto SourceTreeService::ServeDistdirTree( break; } if (std::get<bool>(res)) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Failed while trying to retrieve content {} from " "repository {}", content, path.string()); - logger_->Emit(LogLevel::Error, str); response->set_status( ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -1125,11 +1103,10 @@ auto SourceTreeService::ServeDistdirTree( ? ObjectType::Executable : ObjectType::File}}, &(*local_api_))) { - auto str = fmt::format( - "Failed to retrieve content {} from remote to " - "local CAS", - content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to retrieve content {} from " + "remote to local CAS", + content); response->set_status( ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -1142,8 +1119,7 @@ auto SourceTreeService::ServeDistdirTree( } // error out if blob is not known if (not blob_found) { - auto str = fmt::format("Content {} is not known", content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Content {} is not known", content); response->set_status(ServeDistdirTreeResponse::NOT_FOUND); return ::grpc::Status::OK; } @@ -1154,10 +1130,10 @@ auto SourceTreeService::ServeDistdirTree( kv.executable() ? ObjectType::Executable : ObjectType::File); } else { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Conversion of content {} to raw id failed unexpectedly", content); - logger_->Emit(LogLevel::Error, str); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1172,9 +1148,8 @@ auto SourceTreeService::ServeDistdirTree( // create in-memory tree of the distdir, now that we know we have all blobs auto tree = GitRepo::CreateShallowTree(entries); if (not tree) { - auto str = - std::string{"Failed to construct in-memory tree for distdir"}; - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to construct in-memory tree for distdir"); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1183,20 +1158,19 @@ auto SourceTreeService::ServeDistdirTree( // add tree to local CAS auto tree_digest = cas.StoreTree(tree->second); if (not tree_digest) { - auto str = fmt::format("Failed to store distdir tree {} to local CAS", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to store distdir tree {} to local CAS", + tree_id); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } // check if tree is already in Git cache auto has_tree = IsTreeInRepo(tree_id, StorageConfig::GitRoot(), logger_); if (not has_tree) { - auto str = - fmt::format("Failed while checking for tree {} in repository {}", - tree_id, - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for tree {} in repository {}", + tree_id, + StorageConfig::GitRoot().string()); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1205,11 +1179,10 @@ auto SourceTreeService::ServeDistdirTree( if (request->sync_tree()) { // only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from local Git cache with the remote " - "in compatible mode", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from local Git cache with " + "the remote in compatible mode", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeDistdirTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -1217,9 +1190,9 @@ auto SourceTreeService::ServeDistdirTree( auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(StorageConfig::GitRoot())) { - auto str = fmt::format("Failed to SetGitCAS at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1228,9 +1201,9 @@ auto SourceTreeService::ServeDistdirTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format("Failed to sync tree {} from local CAS", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from local CAS", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeDistdirTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -1245,11 +1218,10 @@ auto SourceTreeService::ServeDistdirTree( for (auto const& path : RemoteServeConfig::KnownRepositories()) { auto has_tree = IsTreeInRepo(tree_id, path, logger_); if (not has_tree) { - auto str = fmt::format( - "Failed while checking for tree {} in repository {}", - tree_id, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for tree {} in repository {}", + tree_id, + path.string()); response->set_status(ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1258,11 +1230,10 @@ auto SourceTreeService::ServeDistdirTree( if (request->sync_tree()) { // only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from local Git cache with the " - "remote in compatible mode", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from local Git cache " + "with the remote in compatible mode", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeDistdirTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -1270,9 +1241,9 @@ auto SourceTreeService::ServeDistdirTree( auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(path)) { - auto str = - fmt::format("Failed to SetGitCAS at {}", path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + path.string()); response->set_status( ServeDistdirTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; @@ -1282,9 +1253,9 @@ auto SourceTreeService::ServeDistdirTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format( - "Failed to sync tree {} from local CAS", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from local CAS", + tree_id); *(response->mutable_tree()) = std::move(tree_id); response->set_status(ServeDistdirTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; @@ -1309,8 +1280,7 @@ auto SourceTreeService::ServeContent( // acquire lock for CAS auto lock = GarbageCollector::SharedLock(); if (!lock) { - auto str = fmt::format("Could not acquire gc SharedLock"); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Could not acquire gc SharedLock"); response->set_status(ServeContentResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1321,9 +1291,9 @@ auto SourceTreeService::ServeContent( // upload blob to remote CAS auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(StorageConfig::GitRoot())) { - auto str = fmt::format("Failed to SetGitCAS at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeContentResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1332,9 +1302,9 @@ auto SourceTreeService::ServeContent( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::File}}, &(*remote_api_))) { - auto str = fmt::format( - "Failed to sync content {} from local Git cache", content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync content {} from local Git cache", + content); response->set_status(ServeContentResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1343,11 +1313,10 @@ auto SourceTreeService::ServeContent( return ::grpc::Status::OK; } if (std::get<bool>(res)) { - auto str = - fmt::format("Failed while checking for content {} in repository {}", - content, - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for content {} in repository {}", + content, + StorageConfig::GitRoot().string()); response->set_status(ServeContentResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1358,9 +1327,9 @@ auto SourceTreeService::ServeContent( // upload blob to remote CAS auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(path)) { - auto str = - fmt::format("Failed to SetGitCAS at {}", path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + path.string()); response->set_status(ServeContentResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1369,11 +1338,11 @@ auto SourceTreeService::ServeContent( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::File}}, &(*remote_api_))) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Failed to sync content {} from known repository {}", content, path.string()); - logger_->Emit(LogLevel::Error, str); response->set_status(ServeContentResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1397,9 +1366,9 @@ auto SourceTreeService::ServeContent( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::File}}, &(*remote_api_))) { - auto str = fmt::format("Failed to sync content {} from local CAS", - content); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync content {} from local CAS", + content); response->set_status(ServeContentResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1420,8 +1389,7 @@ auto SourceTreeService::ServeTree( // acquire lock for CAS auto lock = GarbageCollector::SharedLock(); if (!lock) { - auto str = fmt::format("Could not acquire gc SharedLock"); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Could not acquire gc SharedLock"); response->set_status(ServeTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1429,30 +1397,28 @@ auto SourceTreeService::ServeTree( // check if tree is in Git cache auto has_tree = IsTreeInRepo(tree_id, StorageConfig::GitRoot(), logger_); if (not has_tree) { - auto str = - fmt::format("Failed while checking for tree {} in repository {}", - tree_id, - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for tree {} in repository {}", + tree_id, + StorageConfig::GitRoot().string()); response->set_status(ServeTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } if (*has_tree) { // upload tree to remote CAS; only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from local Git cache with the remote in " - "compatible mode", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from local Git cache with the " + "remote in compatible mode", + tree_id); response->set_status(ServeTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; } auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(StorageConfig::GitRoot())) { - auto str = fmt::format("Failed to SetGitCAS at {}", - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + StorageConfig::GitRoot().string()); response->set_status(ServeTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1461,9 +1427,9 @@ auto SourceTreeService::ServeTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format( - "Failed to sync tree {} from local Git cache", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from local Git cache", + tree_id); response->set_status(ServeTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1475,31 +1441,29 @@ auto SourceTreeService::ServeTree( for (auto const& path : RemoteServeConfig::KnownRepositories()) { auto has_tree = IsTreeInRepo(tree_id, path, logger_); if (not has_tree) { - auto str = fmt::format( - "Failed while checking for tree {} in repository {}", - tree_id, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for tree {} in repository {}", + tree_id, + path.string()); response->set_status(ServeTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } if (*has_tree) { // upload tree to remote CAS; only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from known repository {} with the " - "remote in compatible mode", - tree_id, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from known repository {} " + "with the remote in compatible mode", + tree_id, + path.string()); response->set_status(ServeTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; } auto repo = RepositoryConfig{}; if (not repo.SetGitCAS(path)) { - auto str = - fmt::format("Failed to SetGitCAS at {}", path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to SetGitCAS at {}", + path.string()); response->set_status(ServeTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1508,11 +1472,10 @@ auto SourceTreeService::ServeTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = fmt::format( - "Failed to sync tree {} from known repository {}", - tree_id, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from known repository {}", + tree_id, + path.string()); response->set_status(ServeTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1525,11 +1488,10 @@ auto SourceTreeService::ServeTree( if (local_api_->IsAvailable(digest)) { // upload tree to remote CAS; only possible in native mode if (Compatibility::IsCompatible()) { - auto str = fmt::format( - "Cannot sync tree {} from local CAS with the remote in " - "compatible mode", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Cannot sync tree {} from local CAS with the remote " + "in compatible mode", + tree_id); response->set_status(ServeTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1537,9 +1499,9 @@ auto SourceTreeService::ServeTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, &(*remote_api_))) { - auto str = - fmt::format("Failed to sync tree {} from local CAS", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to sync tree {} from local CAS", + tree_id); response->set_status(ServeTreeResponse::SYNC_ERROR); return ::grpc::Status::OK; } @@ -1560,19 +1522,17 @@ auto SourceTreeService::CheckRootTree( // acquire lock for CAS auto lock = GarbageCollector::SharedLock(); if (!lock) { - auto str = fmt::format("Could not acquire gc SharedLock"); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Could not acquire gc SharedLock"); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } // check first in the Git cache auto has_tree = IsTreeInRepo(tree_id, StorageConfig::GitRoot(), logger_); if (not has_tree) { - auto str = - fmt::format("Failed while checking for tree {} in repository {}", - tree_id, - StorageConfig::GitRoot().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for tree {} in repository {}", + tree_id, + StorageConfig::GitRoot().string()); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1585,11 +1545,10 @@ auto SourceTreeService::CheckRootTree( for (auto const& path : RemoteServeConfig::KnownRepositories()) { auto has_tree = IsTreeInRepo(tree_id, path, logger_); if (not has_tree) { - auto str = fmt::format( - "Failed while checking for tree {} in repository {}", - tree_id, - path.string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed while checking for tree {} in repository {}", + tree_id, + path.string()); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1607,11 +1566,10 @@ auto SourceTreeService::CheckRootTree( auto tmp_dir = StorageConfig::CreateTypedTmpDir("source-tree-check-root-tree"); if (not tmp_dir) { - auto str = fmt::format( - "Failed to create tmp directory for copying " - "git-tree {} from remote CAS", - digest.hash()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to create tmp directory for copying git-tree " + "{} from remote CAS", + digest.hash()); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1619,10 +1577,10 @@ auto SourceTreeService::CheckRootTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, {tmp_dir->GetPath()})) { - auto str = fmt::format("Failed to copy git-tree {} to {}", - tree_id, - tmp_dir->GetPath().string()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to copy git-tree {} to {}", + tree_id, + tmp_dir->GetPath().string()); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1633,18 +1591,18 @@ auto SourceTreeService::CheckRootTree( ); if (res.index() == 0) { // report the error - logger_->Emit(LogLevel::Error, std::get<0>(res)); + logger_->Emit(LogLevel::Error, "{}", std::get<0>(res)); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } auto const& imported_tree_id = std::get<1>(res); // sanity check if (imported_tree_id != tree_id) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Unexpected mismatch in imported tree:\nexpected {} but got {}", tree_id, imported_tree_id); - logger_->Emit(LogLevel::Error, str); response->set_status(CheckRootTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1665,28 +1623,26 @@ auto SourceTreeService::GetRemoteTree( // acquire lock for CAS auto lock = GarbageCollector::SharedLock(); if (!lock) { - auto str = fmt::format("Could not acquire gc SharedLock"); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, "Could not acquire gc SharedLock"); response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } // get tree from remote CAS into tmp dir auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true}; if (not remote_api_->IsAvailable(digest)) { - auto str = fmt::format("Remote CAS does not contain expected tree {}", - tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Remote CAS does not contain expected tree {}", + tree_id); response->set_status(GetRemoteTreeResponse::FAILED_PRECONDITION); return ::grpc::Status::OK; } auto tmp_dir = StorageConfig::CreateTypedTmpDir("source-tree-get-remote-tree"); if (not tmp_dir) { - auto str = fmt::format( - "Failed to create tmp directory for copying git-tree {} from " - "remote CAS", - digest.hash()); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to create tmp directory for copying git-tree {} " + "from remote CAS", + digest.hash()); response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } @@ -1694,9 +1650,9 @@ auto SourceTreeService::GetRemoteTree( {Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}}, {tmp_dir->GetPath()}, &(*local_api_))) { - auto str = - fmt::format("Failed to retrieve tree {} from remote CAS", tree_id); - logger_->Emit(LogLevel::Error, str); + logger_->Emit(LogLevel::Error, + "Failed to retrieve tree {} from remote CAS", + tree_id); response->set_status(GetRemoteTreeResponse::FAILED_PRECONDITION); return ::grpc::Status::OK; } @@ -1707,18 +1663,18 @@ auto SourceTreeService::GetRemoteTree( ); if (res.index() == 0) { // report the error - logger_->Emit(LogLevel::Error, std::get<0>(res)); + logger_->Emit(LogLevel::Error, "{}", std::get<0>(res)); response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } auto const& imported_tree_id = std::get<1>(res); // sanity check if (imported_tree_id != tree_id) { - auto str = fmt::format( + logger_->Emit( + LogLevel::Error, "Unexpected mismatch in imported tree:\nexpected {}, but got {}", tree_id, imported_tree_id); - logger_->Emit(LogLevel::Error, str); response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR); return ::grpc::Status::OK; } 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}; } diff --git a/src/buildtool/serve_api/serve_service/target_utils.cpp b/src/buildtool/serve_api/serve_service/target_utils.cpp index c9268f63..7a94c9ee 100644 --- a/src/buildtool/serve_api/serve_service/target_utils.cpp +++ b/src/buildtool/serve_api/serve_service/target_utils.cpp @@ -38,13 +38,12 @@ auto IsTreeInRepo(std::string const& tree_id, auto wrapped_logger = std::make_shared<GitRepo::anon_logger_t>( [logger, repo_path, tree_id](auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( - "ServeTarget: While checking existence of tree {} " - "in repository {}:\n{}", - tree_id, - repo_path.string(), - msg); - logger->Emit(LogLevel::Info, err); + logger->Emit(LogLevel::Info, + "ServeTarget: While checking existence of " + "tree {} in repository {}:\n{}", + tree_id, + repo_path.string(), + msg); } }); if (auto res = repo->CheckTreeExists(tree_id, wrapped_logger)) { @@ -238,13 +237,12 @@ auto GetBlobContent(std::filesystem::path const& repo_path, auto wrapped_logger = std::make_shared<GitRepo::anon_logger_t>( [logger, repo_path, tree_id](auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( - "ServeTargetVariables: While checking if tree {} " - "exists in repository {}:\n{}", - tree_id, - repo_path.string(), - msg); - logger->Emit(LogLevel::Debug, err); + logger->Emit(LogLevel::Debug, + "ServeTargetVariables: While checking if " + "tree {} exists in repository {}:\n{}", + tree_id, + repo_path.string(), + msg); } }); if (repo->CheckTreeExists(tree_id, wrapped_logger) == true) { @@ -255,26 +253,25 @@ auto GetBlobContent(std::filesystem::path const& repo_path, [logger, repo_path, blob_id = entry_info->id]( auto const& msg, bool fatal) { if (fatal) { - auto err = fmt::format( + logger->Emit( + LogLevel::Debug, "ServeTargetVariables: While retrieving " "blob {} from repository {}:\n{}", blob_id, repo_path.string(), msg); - logger->Emit(LogLevel::Debug, err); } }); // get blob content return repo->TryReadBlob(entry_info->id, wrapped_logger); } // trace failure to get entry - auto err = fmt::format( - "ServeTargetVariables: Failed to retrieve entry {} in " - "tree {} from repository {}", - rel_path, - tree_id, - repo_path.string()); - logger->Emit(LogLevel::Debug, err); + logger->Emit(LogLevel::Debug, + "ServeTargetVariables: Failed to retrieve entry " + "{} in tree {} from repository {}", + rel_path, + tree_id, + repo_path.string()); return std::pair(false, std::nullopt); // could not read blob } } |