From df8c8411e208fd84c0084cf92a093c3f08c07d02 Mon Sep 17 00:00:00 2001 From: Sascha Roloff Date: Fri, 23 Feb 2024 16:10:26 +0100 Subject: Implement blob splicing protocol at just client side --- .../execution_api/remote/bazel/bazel_api.cpp | 24 ++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'src/buildtool/execution_api/remote/bazel/bazel_api.cpp') diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index 157016f7..afbc9d2e 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -599,3 +599,27 @@ auto BazelApi::CreateAction( [[nodiscard]] auto BazelApi::BlobSplitSupport() const noexcept -> bool { return network_->BlobSplitSupport(); } + +[[nodiscard]] auto BazelApi::SpliceBlob( + ArtifactDigest const& blob_digest, + std::vector const& chunk_digests) const noexcept + -> std::optional { + auto digests = std::vector{}; + digests.reserve(chunk_digests.size()); + std::transform(chunk_digests.cbegin(), + chunk_digests.cend(), + std::back_inserter(digests), + [](auto const& artifact_digest) { + return static_cast(artifact_digest); + }); + auto digest = network_->SpliceBlob( + static_cast(blob_digest), digests); + if (not digest) { + return std::nullopt; + } + return ArtifactDigest{*digest}; +} + +[[nodiscard]] auto BazelApi::BlobSpliceSupport() const noexcept -> bool { + return network_->BlobSpliceSupport(); +} -- cgit v1.2.3