diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2025-01-28 11:09:11 +0100 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2025-02-07 12:39:05 +0100 |
commit | 309ec18cc97554b46962cadd55c9f5a1f114c286 (patch) | |
tree | 6a30c6d1d66b75d9d1d826eec95fa51b8a7111ec /src/buildtool/execution_api/remote/bazel/bazel_api.cpp | |
parent | db63d128743adc838e1b658e0d475d37d33a7aa5 (diff) | |
download | justbuild-309ec18cc97554b46962cadd55c9f5a1f114c286.tar.gz |
BazelCasClient: Use unordered_set in FindMissingBlobs
Diffstat (limited to 'src/buildtool/execution_api/remote/bazel/bazel_api.cpp')
-rw-r--r-- | src/buildtool/execution_api/remote/bazel/bazel_api.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
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<ArtifactDigest> const& digests) const noexcept -> std::vector<ArtifactDigest> { - std::vector<bazel_re::Digest> bazel_digests; - bazel_digests.reserve(digests.size()); - std::unordered_map<bazel_re::Digest, ArtifactDigest const*> 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<ArtifactDigest> 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<bazel_re::Digest, ArtifactDigest>::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<ArtifactDigest> result; + result.reserve(missing.size()); + std::move(missing.begin(), missing.end(), std::back_inserter(result)); return result; } |