diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-25 15:21:26 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-02-16 17:22:22 +0100 |
commit | cda5119e8692dd65ff0980f4e5eb91a2c0c0b756 (patch) | |
tree | e42ad54636a8bea9d938b2922f864e7b969e896d | |
parent | ae647af4fe513f6a6d3948d3d5856ce490ed60c6 (diff) | |
download | justbuild-cda5119e8692dd65ff0980f4e5eb91a2c0c0b756.tar.gz |
serve target: Upload also the artifacts to remote CAS after orchestrated build
-rw-r--r-- | src/buildtool/serve_api/serve_service/target.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
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<Artifact::ObjectInfo> 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; |