summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-01-28 11:09:11 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-07 12:39:05 +0100
commit309ec18cc97554b46962cadd55c9f5a1f114c286 (patch)
tree6a30c6d1d66b75d9d1d826eec95fa51b8a7111ec /src/buildtool/execution_api/remote/bazel/bazel_api.cpp
parentdb63d128743adc838e1b658e0d475d37d33a7aa5 (diff)
downloadjustbuild-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.cpp27
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;
}