From 7b62c8274bea6b55a36b425b670a341c8093de08 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Fri, 24 May 2024 14:26:04 +0200 Subject: blob containers: Store and upload taking into account content size Update logic populating containers to use the new method which is aware of the maximum transfer limit. --- .../execution_api/remote/bazel/bazel_response.cpp | 30 +++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'src/buildtool/execution_api/remote/bazel/bazel_response.cpp') diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index aea90ba8..df1d4736 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -18,7 +18,8 @@ #include "gsl/gsl" #include "src/buildtool/compatibility/native_support.hpp" -#include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" +#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" +#include "src/buildtool/execution_api/common/common_api.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -219,16 +220,39 @@ auto BazelResponse::UploadTreeMessageDirectories( return std::nullopt; } auto root_digest = rootdir_blob->digest; - dir_blobs.Emplace(std::move(*rootdir_blob)); + // store or upload rootdir blob, taking maximum transfer size into account + if (not UpdateContainerAndUpload( + &dir_blobs, + std::move(*rootdir_blob), + /*exception_is_fatal=*/false, + [&network = network_](BazelBlobContainer&& blobs) { + return network->UploadBlobs(std::move(blobs)); + })) { + Logger::Log(LogLevel::Error, + "uploading Tree's Directory messages failed"); + return std::nullopt; + } for (auto const& subdir : tree.children()) { auto subdir_blob = ProcessDirectoryMessage(subdir); if (not subdir_blob) { return std::nullopt; } - dir_blobs.Emplace(std::move(*subdir_blob)); + // store or upload blob, taking maximum transfer size into account + if (not UpdateContainerAndUpload( + &dir_blobs, + std::move(*subdir_blob), + /*exception_is_fatal=*/false, + [&network = network_](BazelBlobContainer&& blobs) { + return network->UploadBlobs(std::move(blobs)); + })) { + Logger::Log(LogLevel::Error, + "uploading Tree's Directory messages failed"); + return std::nullopt; + } } + // upload any remaining blob if (not network_->UploadBlobs(std::move(dir_blobs))) { Logger::Log(LogLevel::Error, "uploading Tree's Directory messages failed"); -- cgit v1.2.3