From 687d9614b5fbcd2e1353eb43f5a1fefc42a69cda Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Thu, 29 Aug 2024 12:04:54 +0200 Subject: Replace bazel_re::Digest in LocalCAS::Split/Splice ...with ArtifactDigest. --- .../execution_api/execution_service/cas_utils.cpp | 45 ++++++++++++++-------- 1 file changed, 28 insertions(+), 17 deletions(-) (limited to 'src/buildtool/execution_api/execution_service/cas_utils.cpp') diff --git a/src/buildtool/execution_api/execution_service/cas_utils.cpp b/src/buildtool/execution_api/execution_service/cas_utils.cpp index e92a2239..3e1f8002 100644 --- a/src/buildtool/execution_api/execution_service/cas_utils.cpp +++ b/src/buildtool/execution_api/execution_service/cas_utils.cpp @@ -15,7 +15,6 @@ #include "src/buildtool/execution_api/execution_service/cas_utils.hpp" #include "fmt/core.h" -#include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" static auto ToGrpc(LargeObjectError&& error) noexcept -> grpc::Status { @@ -48,13 +47,10 @@ auto CASUtils::EnsureTreeInvariant(bazel_re::Digest const& digest, auto CASUtils::SplitBlobIdentity(bazel_re::Digest const& blob_digest, Storage const& storage) noexcept -> expected, grpc::Status> { - // Check blob existence. - auto path = - NativeSupport::IsTree(blob_digest.hash()) - ? storage.CAS().TreePath(static_cast(blob_digest)) - : storage.CAS().BlobPath(static_cast(blob_digest), - false); + auto const a_digest = static_cast(blob_digest); + auto path = a_digest.IsTree() ? storage.CAS().TreePath(a_digest) + : storage.CAS().BlobPath(a_digest, false); if (not path) { return unexpected{ grpc::Status{grpc::StatusCode::NOT_FOUND, @@ -66,7 +62,7 @@ auto CASUtils::SplitBlobIdentity(bazel_re::Digest const& blob_digest, // return the identity of a tree, we need to put the tree data in file CAS // and return the resulting digest. auto chunk_digests = std::vector{}; - if (NativeSupport::IsTree(blob_digest.hash())) { + if (a_digest.IsTree()) { auto tree_data = FileSystemManager::ReadFile(*path); if (not tree_data) { return unexpected{grpc::Status{ @@ -91,13 +87,21 @@ auto CASUtils::SplitBlobFastCDC(bazel_re::Digest const& blob_digest, Storage const& storage) noexcept -> expected, grpc::Status> { // Split blob into chunks: - auto split = NativeSupport::IsTree(blob_digest.hash()) - ? storage.CAS().SplitTree(blob_digest) - : storage.CAS().SplitBlob(blob_digest); + auto const a_digest = static_cast(blob_digest); + auto split = a_digest.IsTree() ? storage.CAS().SplitTree(a_digest) + : storage.CAS().SplitBlob(a_digest); // Process result: if (split) { - return *std::move(split); + std::vector result; + result.reserve(split->size()); + std::transform(split->begin(), + split->end(), + std::back_inserter(result), + [](ArtifactDigest const& digest) { + return static_cast(digest); + }); + return result; } // Process errors return unexpected{ToGrpc(std::move(split).error())}; @@ -107,15 +111,22 @@ auto CASUtils::SpliceBlob(bazel_re::Digest const& blob_digest, std::vector const& chunk_digests, Storage const& storage) noexcept -> expected { + auto const a_digest = static_cast(blob_digest); + std::vector a_parts; + a_parts.reserve(chunk_digests.size()); + std::transform(chunk_digests.begin(), + chunk_digests.end(), + std::back_inserter(a_parts), + [](auto const& digest) { return ArtifactDigest{digest}; }); + // Splice blob from chunks: - auto splice = - NativeSupport::IsTree(blob_digest.hash()) - ? storage.CAS().SpliceTree(blob_digest, chunk_digests) - : storage.CAS().SpliceBlob(blob_digest, chunk_digests, false); + auto splice = a_digest.IsTree() + ? storage.CAS().SpliceTree(a_digest, a_parts) + : storage.CAS().SpliceBlob(a_digest, a_parts, false); // Process result: if (splice) { - return *std::move(splice); + return static_cast(*splice); } return unexpected{ToGrpc(std::move(splice).error())}; } -- cgit v1.2.3