diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-05-14 16:48:20 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-05-15 16:46:45 +0200 |
commit | 0fd32f8b9d707d807c236156de12118b0a695d69 (patch) | |
tree | 08181c9b2d429ab896cee10302630f6972aae64a /src/buildtool/serve_api/serve_service/source_tree.cpp | |
parent | 2bcbeb55f45a6c5aa193fab06f301f7231d5f16c (diff) | |
download | justbuild-0fd32f8b9d707d807c236156de12118b0a695d69.tar.gz |
logging: Do not make assumptions in emit calls
The Emit method of the Logger class, when called with a string as
second argument, expects it to be a format string. It should be
considered a programming error to pass a string variable as that
argument without knowing for certain that it does not contain any
format escape character ('{', '}'); instead, one should be
conservative and use the blind format string "{}" as second
argument and pass the unknown string variable as third argument.
Diffstat (limited to 'src/buildtool/serve_api/serve_service/source_tree.cpp')
-rw-r--r-- | src/buildtool/serve_api/serve_service/source_tree.cpp | 668 |
1 files changed, 312 insertions, 356 deletions
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; } |