From f10bd16283b8856bdf7295f96a1cebc54f0350bb Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Wed, 29 Jan 2025 16:08:37 +0100 Subject: BazelNetwork: Use ArtifactDigests in IsAvailable --- .../execution_api/remote/bazel/bazel_api.cpp | 12 ++-------- .../execution_api/remote/bazel/bazel_network.cpp | 26 ++++++++++++++-------- .../execution_api/remote/bazel/bazel_network.hpp | 9 ++++---- 3 files changed, 24 insertions(+), 23 deletions(-) (limited to 'src/buildtool/execution_api/remote/bazel') diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index d46c9e09..d9990f9a 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -46,7 +46,6 @@ #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/multithreading/task_system.hpp" -#include "src/utils/cpp/back_map.hpp" #include "src/utils/cpp/expected.hpp" namespace { @@ -545,20 +544,13 @@ auto BazelApi::CreateAction( [[nodiscard]] auto BazelApi::IsAvailable( ArtifactDigest const& digest) const noexcept -> bool { - return network_->IsAvailable(ArtifactDigestFactory::ToBazel(digest)); + return network_->IsAvailable(digest); } [[nodiscard]] auto BazelApi::GetMissingDigests( std::unordered_set const& digests) const noexcept -> std::unordered_set { - auto const back_map = BackMap::Make( - &digests, ArtifactDigestFactory::ToBazel); - if (not back_map.has_value()) { - return digests; - } - - auto const bazel_result = network_->FindMissingBlobs(back_map->GetKeys()); - return back_map->GetValues(bazel_result); + return network_->FindMissingBlobs(digests); } [[nodiscard]] auto BazelApi::SplitBlob(ArtifactDigest const& blob_digest) diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp index dde80242..a194c2ee 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp @@ -43,15 +43,25 @@ BazelNetwork::BazelNetwork( exec_config_{exec_config}, hash_function_{*hash_function} {} -auto BazelNetwork::IsAvailable(bazel_re::Digest const& digest) const noexcept +auto BazelNetwork::IsAvailable(ArtifactDigest const& digest) const noexcept -> bool { - return cas_->FindMissingBlobs(instance_name_, {digest}).empty(); + return cas_ + ->FindMissingBlobs(instance_name_, + {ArtifactDigestFactory::ToBazel(digest)}) + .empty(); } auto BazelNetwork::FindMissingBlobs( - std::unordered_set const& digests) const noexcept - -> std::unordered_set { - return cas_->FindMissingBlobs(instance_name_, digests); + std::unordered_set const& digests) const noexcept + -> std::unordered_set { + auto const back_map = BackMap::Make( + &digests, ArtifactDigestFactory::ToBazel); + if (not back_map.has_value()) { + return digests; + } + auto missing_digests = + cas_->FindMissingBlobs(instance_name_, back_map->GetKeys()); + return back_map->GetValues(missing_digests); } auto BazelNetwork::SplitBlob(bazel_re::Digest const& blob_digest) const noexcept @@ -127,10 +137,8 @@ auto BazelNetwork::DoUploadBlobs( auto BazelNetwork::UploadBlobs(std::unordered_set&& blobs, bool skip_find_missing) noexcept -> bool { if (not skip_find_missing) { - auto const back_map = BackMap::Make( - &blobs, [](ArtifactBlob const& blob) { - return ArtifactDigestFactory::ToBazel(blob.digest); - }); + auto const back_map = BackMap::Make( + &blobs, [](ArtifactBlob const& blob) { return blob.digest; }); if (not back_map.has_value()) { return false; } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp index 0d892a55..8a8eb205 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp @@ -23,6 +23,7 @@ #include "gsl/gsl" #include "src/buildtool/auth/authentication.hpp" +#include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/common/remote/port.hpp" #include "src/buildtool/common/remote/retry_config.hpp" @@ -49,12 +50,12 @@ class BazelNetwork { /// \brief Check if digest exists in CAS /// \param[in] digest The digest to look up /// \returns True if digest exists in CAS, false otherwise - [[nodiscard]] auto IsAvailable( - bazel_re::Digest const& digest) const noexcept -> bool; + [[nodiscard]] auto IsAvailable(ArtifactDigest const& digest) const noexcept + -> bool; [[nodiscard]] auto FindMissingBlobs( - std::unordered_set const& digests) const noexcept - -> std::unordered_set; + std::unordered_set const& digests) const noexcept + -> std::unordered_set; [[nodiscard]] auto SplitBlob(bazel_re::Digest const& blob_digest) const noexcept -> std::optional>; -- cgit v1.2.3