From cda5119e8692dd65ff0980f4e5eb91a2c0c0b756 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Thu, 25 Jan 2024 15:21:26 +0100 Subject: serve target: Upload also the artifacts to remote CAS after orchestrated build --- src/buildtool/serve_api/serve_service/target.cpp | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/buildtool/serve_api/serve_service/target.cpp') diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index 04db8162..0721577b 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -461,8 +461,27 @@ auto TargetService::ServeTarget( return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg}; } - // make sure remote CAS has all artifacts + // now that the target cache key is in, make sure remote CAS has all + // required entries if (auto target_entry = tc->Read(tc_key); target_entry) { + // make sure all artifacts referenced in the target cache value are in + // the remote cas + std::vector tc_artifacts; + if (!target_entry->first.ToArtifacts(&tc_artifacts)) { + auto msg = fmt::format( + "Failed to extract artifacts from target cache entry {}", + target_entry->second.ToString()); + logger_->Emit(LogLevel::Error, msg); + return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg}; + } + if (!local_api_->RetrieveToCas(tc_artifacts, &*remote_api_)) { + auto msg = fmt::format( + "Failed to upload to remote cas the artifacts referenced in " + "the target cache entry {}", + target_entry->second.ToString()); + logger_->Emit(LogLevel::Error, msg); + return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg}; + } // make sure the target cache value is in the remote cas if (!local_api_->RetrieveToCas({target_entry->second}, &*remote_api_)) { auto msg = fmt::format( @@ -471,6 +490,7 @@ auto TargetService::ServeTarget( logger_->Emit(LogLevel::Error, msg); return ::grpc::Status{::grpc::StatusCode::UNAVAILABLE, msg}; } + // set response *(response->mutable_target_value()) = std::move(target_entry->second.digest); return ::grpc::Status::OK; -- cgit v1.2.3