From 309ec18cc97554b46962cadd55c9f5a1f114c286 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Tue, 28 Jan 2025 11:09:11 +0100 Subject: BazelCasClient: Use unordered_set in FindMissingBlobs --- .../execution_api/remote/bazel/bazel_api.cpp | 27 +++++++++------------- 1 file changed, 11 insertions(+), 16 deletions(-) (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 3a5fd860..f1d06429 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -49,6 +49,7 @@ #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" #include "src/utils/cpp/transformed_range.hpp" @@ -602,23 +603,17 @@ auto BazelApi::CreateAction( [[nodiscard]] auto BazelApi::IsAvailable( std::vector const& digests) const noexcept -> std::vector { - std::vector bazel_digests; - bazel_digests.reserve(digests.size()); - std::unordered_map digest_map; - for (auto const& digest : digests) { - auto const& bazel_digest = - bazel_digests.emplace_back(ArtifactDigestFactory::ToBazel(digest)); - digest_map.insert_or_assign(bazel_digest, &digest); - } - auto const bazel_result = network_->IsAvailable(bazel_digests); - std::vector result; - result.reserve(bazel_result.size()); - for (auto const& bazel_digest : bazel_result) { - auto it = digest_map.find(bazel_digest); - if (it != digest_map.end()) { - result.push_back(*it->second); - } + auto const back_map = BackMap::Make( + &digests, ArtifactDigestFactory::ToBazel); + if (not back_map.has_value()) { + return digests; } + + auto const bazel_result = network_->IsAvailable(back_map->GetKeys()); + auto missing = back_map->GetValues(bazel_result); + std::vector result; + result.reserve(missing.size()); + std::move(missing.begin(), missing.end(), std::back_inserter(result)); return result; } -- cgit v1.2.3