From 0a8dbe086a23bbb905514007d21e2e04cdaae1e8 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Tue, 4 Feb 2025 18:26:39 +0100 Subject: IExecutionApi: Use unordered_set in IsAvailable --- .../execution_api/remote/bazel/bazel_api.cpp | 27 ++++++++++------------ 1 file changed, 12 insertions(+), 15 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 ed5247e5..66f81d01 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -117,14 +117,15 @@ namespace { } // Fetch unknown chunks. - auto digest_set = std::unordered_set{chunk_digests->begin(), - chunk_digests->end()}; - auto unique_digests = - std::vector{digest_set.begin(), digest_set.end()}; - - auto missing_artifact_digests = other_api.IsAvailable(unique_digests); - if (not ::RetrieveToCas( - missing_artifact_digests, other_api, network, info_map)) { + auto missing_artifact_digests = other_api.IsAvailable( + std::unordered_set(chunk_digests->begin(), chunk_digests->end())); + + std::vector missing_digests; + missing_digests.reserve(missing_artifact_digests.size()); + std::move(missing_artifact_digests.begin(), + missing_artifact_digests.end(), + std::back_inserter(missing_digests)); + if (not ::RetrieveToCas(missing_digests, other_api, network, info_map)) { return false; } @@ -570,8 +571,8 @@ auto BazelApi::CreateAction( } [[nodiscard]] auto BazelApi::IsAvailable( - std::vector const& digests) const noexcept - -> std::vector { + 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()) { @@ -579,11 +580,7 @@ auto BazelApi::CreateAction( } 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; + return back_map->GetValues(bazel_result); } [[nodiscard]] auto BazelApi::SplitBlob(ArtifactDigest const& blob_digest) -- cgit v1.2.3