From be353baa567da5de46b257a4f73b48dc301aacf0 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Thu, 30 Nov 2023 12:26:10 +0100 Subject: serve target client: Ensure repository key blob is also in remote CAS --- src/buildtool/serve_api/remote/target_client.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'src/buildtool/serve_api/remote/target_client.cpp') diff --git a/src/buildtool/serve_api/remote/target_client.cpp b/src/buildtool/serve_api/remote/target_client.cpp index 8571910d..7166a604 100644 --- a/src/buildtool/serve_api/remote/target_client.cpp +++ b/src/buildtool/serve_api/remote/target_client.cpp @@ -25,7 +25,8 @@ TargetClient::TargetClient(std::string const& server, Port port) noexcept { CreateChannelWithCredentials(server, port)); } -auto TargetClient::ServeTarget(const TargetCacheKey& key) +auto TargetClient::ServeTarget(const TargetCacheKey& key, + const std::string& repo_key) -> std::optional> { // make sure the blob containing the key is in the remote cas if (!local_api_->RetrieveToCas({key.Id()}, &*remote_api_)) { @@ -34,6 +35,16 @@ auto TargetClient::ServeTarget(const TargetCacheKey& key) key.Id().ToString()); return std::nullopt; } + // make sure the repository configuration blob is in the remote cas + if (!local_api_->RetrieveToCas( + {Artifact::ObjectInfo{.digest = ArtifactDigest{repo_key, 0, false}, + .type = ObjectType::File}}, + &*remote_api_)) { + logger_.Emit(LogLevel::Error, + "failed to retrieve to remote cas blob {}", + repo_key); + return std::nullopt; + } bazel_re::Digest key_dgst{key.Id().digest}; justbuild::just_serve::ServeTargetRequest request{}; -- cgit v1.2.3