diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-10 15:19:14 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-09-11 14:52:07 +0200 |
commit | 0166e528437bc45216000370fe413ee3e08c9d50 (patch) | |
tree | c79a84207f23ea88572ea8dfe43b3b8f450dd6ca /src | |
parent | 4249d4758cb50238d24e5631af50b0e363e9e789 (diff) | |
download | justbuild-0166e528437bc45216000370fe413ee3e08c9d50.tar.gz |
Use ArtifactDigestFactory in TargetService
...to create ArtifactDigests.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/serve_api/serve_service/TARGETS | 1 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/target.cpp | 18 |
2 files changed, 15 insertions, 4 deletions
diff --git a/src/buildtool/serve_api/serve_service/TARGETS b/src/buildtool/serve_api/serve_service/TARGETS index ed67bcdf..6135cd5a 100644 --- a/src/buildtool/serve_api/serve_service/TARGETS +++ b/src/buildtool/serve_api/serve_service/TARGETS @@ -127,6 +127,7 @@ , ["src/buildtool/serve_api/remote", "serve_api"] , ["src/buildtool/storage", "backend_description"] , ["src/buildtool/storage", "repository_garbage_collector"] + , ["src/buildtool/crypto", "hash_function"] ] } , "configuration_service": diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index 5bd94ba2..c3d6baca 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -30,6 +30,7 @@ #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" +#include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/execution_engine/executor/context.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/file_system/object_type.hpp" @@ -324,10 +325,19 @@ auto TargetService::ServeTarget( logger_->Emit(LogLevel::Error, "{}", msg); return ::grpc::Status{::grpc::StatusCode::NOT_FOUND, msg}; } - ArtifactDigest repo_key_dgst{repo_key->String(), 0, /*is_tree=*/false}; - if (not apis_.local->IsAvailable(repo_key_dgst) and + auto const repo_key_dgst = + ArtifactDigestFactory::Create(apis_.hash_function.GetType(), + repo_key->String(), + 0, + /*is_tree=*/false); + if (not repo_key_dgst) { + logger_->Emit(LogLevel::Error, "{}", repo_key_dgst.error()); + return ::grpc::Status{::grpc::StatusCode::INTERNAL, + repo_key_dgst.error()}; + } + if (not apis_.local->IsAvailable(*repo_key_dgst) and not apis_.remote->RetrieveToCas( - {Artifact::ObjectInfo{.digest = repo_key_dgst, + {Artifact::ObjectInfo{.digest = *repo_key_dgst, .type = ObjectType::File}}, *apis_.local)) { auto msg = fmt::format( @@ -337,7 +347,7 @@ auto TargetService::ServeTarget( return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg}; } auto repo_config_path = local_context_.storage->CAS().BlobPath( - repo_key_dgst, /*is_executable=*/false); + *repo_key_dgst, /*is_executable=*/false); if (not repo_config_path) { // This should not fail unless something went really bad... auto msg = fmt::format( |