summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2025-01-29 15:21:55 +0100
committerMaksim Denisov <denisov.maksim@huawei.com>2025-02-07 14:58:04 +0100
commitab23f31e117f59b27483b8b135373a2df9ffcafe (patch)
tree02115e77e7d006315d955a4f9ea4f7f28acc6fb7 /src
parent80acdce41b5ff9bf4c0b4602d646a250bfaede85 (diff)
downloadjustbuild-ab23f31e117f59b27483b8b135373a2df9ffcafe.tar.gz
BazelCasClient: Use ArtifactBlob in BatchUpdateBlobs
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp33
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp4
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network.cpp11
3 files changed, 23 insertions, 25 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 f42b0605..dc920bca 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
@@ -485,9 +485,9 @@ auto BazelCasClient::FindMissingBlobs(
return result;
}
-auto BazelCasClient::BatchUpdateBlobs(
- std::string const& instance_name,
- std::unordered_set<BazelBlob> const& blobs) const noexcept -> std::size_t {
+auto BazelCasClient::BatchUpdateBlobs(std::string const& instance_name,
+ std::unordered_set<ArtifactBlob> const&
+ blobs) const noexcept -> std::size_t {
if (blobs.empty()) {
return 0;
}
@@ -501,7 +501,7 @@ auto BazelCasClient::BatchUpdateBlobs(
blobs.end(),
"BatchUpdateBlobs",
[](bazel_re::BatchUpdateBlobsRequest* request,
- BazelBlob const& x) {
+ ArtifactBlob const& x) {
*(request->add_requests()) =
BazelCasClient::CreateUpdateBlobsSingleRequest(x);
});
@@ -572,10 +572,11 @@ auto BazelCasClient::BatchUpdateBlobs(
// we are going extra defensive here and also consider missing responses
// to be a failed blob update. Issue a retry for the missing blobs.
logger_.Emit(LogLevel::Trace, "Retrying with missing blobs");
- std::unordered_set<BazelBlob> missing_blobs;
+ std::unordered_set<ArtifactBlob> missing_blobs;
missing_blobs.reserve(missing);
for (auto const& blob : blobs) {
- if (not updated.contains(blob.digest)) {
+ auto bazel_digest = ArtifactDigestFactory::ToBazel(blob.digest);
+ if (not updated.contains(bazel_digest)) {
missing_blobs.emplace(blob);
}
}
@@ -586,11 +587,16 @@ auto BazelCasClient::BatchUpdateBlobs(
// trying that again; instead, we fall back to uploading each blob
// sequentially.
logger_.Emit(LogLevel::Debug, "Falling back to sequential blob upload");
- return std::count_if(blobs.begin(),
- blobs.end(),
- [this, &instance_name](BazelBlob const& blob) {
- return UpdateSingleBlob(instance_name, blob);
- });
+ return std::count_if(
+ blobs.begin(),
+ blobs.end(),
+ [this, &instance_name](ArtifactBlob const& blob) {
+ BazelBlob bazel_blob{
+ ArtifactDigestFactory::ToBazel(blob.digest),
+ blob.data,
+ blob.is_exec};
+ return UpdateSingleBlob(instance_name, bazel_blob);
+ });
}
return updated.size();
}
@@ -675,10 +681,11 @@ auto BazelCasClient::CreateBatchRequestsMaxSize(
return result;
}
-auto BazelCasClient::CreateUpdateBlobsSingleRequest(BazelBlob const& b) noexcept
+auto BazelCasClient::CreateUpdateBlobsSingleRequest(
+ ArtifactBlob const& b) noexcept
-> bazel_re::BatchUpdateBlobsRequest_Request {
bazel_re::BatchUpdateBlobsRequest_Request r{};
- (*r.mutable_digest()) = b.digest;
+ (*r.mutable_digest()) = ArtifactDigestFactory::ToBazel(b.digest);
r.set_data(*b.data);
return r;
}
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 7263bcf2..41b323d2 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
@@ -65,7 +65,7 @@ class BazelCasClient {
/// \returns The count of successfully updated blobs
[[nodiscard]] auto BatchUpdateBlobs(
std::string const& instance_name,
- std::unordered_set<BazelBlob> const& blobs) const noexcept
+ std::unordered_set<ArtifactBlob> const& blobs) const noexcept
-> std::size_t;
/// \brief Read multiple blobs in batch transfer
@@ -158,7 +158,7 @@ class BazelCasClient {
request_builder) const noexcept -> std::vector<TRequest>;
[[nodiscard]] static auto CreateUpdateBlobsSingleRequest(
- BazelBlob const& b) noexcept
+ ArtifactBlob const& b) noexcept
-> bazel_re::BatchUpdateBlobsRequest_Request;
[[nodiscard]] static auto CreateGetTreeRequest(
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
index a194c2ee..1f65201c 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
@@ -115,18 +115,9 @@ auto BazelNetwork::DoUploadBlobs(
}
to_stream.clear();
- std::unordered_set<BazelBlob> bazel_blobs;
- bazel_blobs.reserve(blobs.size());
- for (auto const& blob : blobs) {
- bazel_blobs.emplace(ArtifactDigestFactory::ToBazel(blob.digest),
- blob.data,
- blob.is_exec);
- }
-
// After uploading via stream api, only small blobs that may be uploaded
// using batch are in the container:
- return cas_->BatchUpdateBlobs(instance_name_, bazel_blobs) ==
- bazel_blobs.size();
+ return cas_->BatchUpdateBlobs(instance_name_, blobs) == blobs.size();
} catch (...) {
Logger::Log(LogLevel::Warning, "Unknown exception");