summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-01-29 16:28:27 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-07 14:58:04 +0100
commite0a542180e60233eb203c227e45b03efc5ed42f2 (patch)
tree2132ab9c9c58fc22c0129c7f8461f2e8213b1ab1 /src
parent7c27025de2a6804b4a04e044e9af2503a22da2e3 (diff)
downloadjustbuild-e0a542180e60233eb203c227e45b03efc5ed42f2.tar.gz
BazelCasClient: Use ArtifactDigest in FindMissingBlobs
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp26
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp4
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network.cpp15
3 files changed, 21 insertions, 24 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
index 179ac0db..2a9fc182 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
@@ -427,19 +427,26 @@ auto BazelCasClient::BlobSpliceSupport(
auto BazelCasClient::FindMissingBlobs(
std::string const& instance_name,
- std::unordered_set<bazel_re::Digest> const& digests) const noexcept
- -> std::unordered_set<bazel_re::Digest> {
- std::unordered_set<bazel_re::Digest> result;
+ std::unordered_set<ArtifactDigest> const& digests) const noexcept
+ -> std::unordered_set<ArtifactDigest> {
+ std::unordered_set<ArtifactDigest> result;
if (digests.empty()) {
return result;
}
+
+ auto const back_map = BackMap<bazel_re::Digest, ArtifactDigest>::Make(
+ &digests, ArtifactDigestFactory::ToBazel);
+ if (not back_map.has_value()) {
+ return digests;
+ }
+
try {
result.reserve(digests.size());
auto requests =
CreateBatchRequestsMaxSize<bazel_re::FindMissingBlobsRequest>(
instance_name,
- digests.begin(),
- digests.end(),
+ back_map->GetKeys().begin(),
+ back_map->GetKeys().end(),
"FindMissingBlobs",
[](bazel_re::FindMissingBlobsRequest* request,
bazel_re::Digest const& x) {
@@ -456,10 +463,11 @@ auto BazelCasClient::FindMissingBlobs(
retry_config_,
logger_);
if (ok) {
- auto batch =
- ProcessResponseContents<bazel_re::Digest>(response);
- for (auto&& x : batch) {
- result.emplace(std::move(x));
+ for (auto& batch :
+ ProcessResponseContents<bazel_re::Digest>(response)) {
+ if (auto value = back_map->GetReference(batch)) {
+ result.emplace(*value.value());
+ }
}
}
else {
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
index 370bb7ca..279164bf 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
@@ -55,8 +55,8 @@ class BazelCasClient {
/// \returns The digests of blobs not found in CAS
[[nodiscard]] auto FindMissingBlobs(
std::string const& instance_name,
- std::unordered_set<bazel_re::Digest> const& digests) const noexcept
- -> std::unordered_set<bazel_re::Digest>;
+ std::unordered_set<ArtifactDigest> const& digests) const noexcept
+ -> std::unordered_set<ArtifactDigest>;
/// \brief Upload multiple blobs in batch transfer
/// \param[in] instance_name Name of the CAS instance
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
index b435fb8e..0be8b539 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
@@ -17,7 +17,6 @@
#include <functional>
#include <utility>
-#include "src/buildtool/common/artifact_digest_factory.hpp"
#include "src/buildtool/execution_api/common/content_blob_container.hpp"
#include "src/buildtool/execution_api/common/message_limits.hpp"
#include "src/buildtool/logging/log_level.hpp"
@@ -44,23 +43,13 @@ BazelNetwork::BazelNetwork(
auto BazelNetwork::IsAvailable(ArtifactDigest const& digest) const noexcept
-> bool {
- return cas_
- ->FindMissingBlobs(instance_name_,
- {ArtifactDigestFactory::ToBazel(digest)})
- .empty();
+ return cas_->FindMissingBlobs(instance_name_, {digest}).empty();
}
auto BazelNetwork::FindMissingBlobs(
std::unordered_set<ArtifactDigest> const& digests) const noexcept
-> std::unordered_set<ArtifactDigest> {
- auto const back_map = BackMap<bazel_re::Digest, ArtifactDigest>::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);
+ return cas_->FindMissingBlobs(instance_name_, digests);
}
auto BazelNetwork::SplitBlob(bazel_re::Digest const& blob_digest) const noexcept