summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp36
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp14
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network.cpp16
3 files changed, 30 insertions, 36 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 373d218e..716e3f53 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp
@@ -21,7 +21,6 @@
#include <unordered_map>
#include "grpcpp/grpcpp.h"
-#include "gsl/gsl"
#include "src/buildtool/common/bazel_types.hpp"
#include "src/buildtool/common/remote/client_common.hpp"
#include "src/buildtool/common/remote/retry.hpp"
@@ -193,13 +192,6 @@ auto BazelCasClient::FindMissingBlobs(
return FindMissingBlobs(instance_name, digests.begin(), digests.end());
}
-auto BazelCasClient::BatchUpdateBlobs(
- std::string const& instance_name,
- std::vector<BazelBlob>::const_iterator const& begin,
- std::vector<BazelBlob>::const_iterator const& end) noexcept -> std::size_t {
- return DoBatchUpdateBlobs(instance_name, begin, end);
-}
-
auto BazelCasClient::BatchReadBlobs(
std::string const& instance_name,
std::vector<bazel_re::Digest>::const_iterator const& begin,
@@ -492,12 +484,12 @@ auto BazelCasClient::FindMissingBlobs(std::string const& instance_name,
return result;
}
-template <class T_OutputIter>
-auto BazelCasClient::DoBatchUpdateBlobs(std::string const& instance_name,
- T_OutputIter const& start,
- T_OutputIter const& end) noexcept
- -> std::size_t {
- if (start == end) {
+auto BazelCasClient::BatchUpdateBlobs(
+ std::string const& instance_name,
+ std::vector<gsl::not_null<BazelBlob const*>>::const_iterator const& begin,
+ std::vector<gsl::not_null<BazelBlob const*>>::const_iterator const&
+ end) noexcept -> std::size_t {
+ if (begin == end) {
return 0;
}
std::vector<bazel_re::Digest> result;
@@ -505,15 +497,15 @@ auto BazelCasClient::DoBatchUpdateBlobs(std::string const& instance_name,
auto requests =
CreateBatchRequestsMaxSize<bazel_re::BatchUpdateBlobsRequest>(
instance_name,
- start,
+ begin,
end,
"BatchUpdateBlobs",
- [this](bazel_re::BatchUpdateBlobsRequest* request,
- BazelBlob const& x) {
+ [](bazel_re::BatchUpdateBlobsRequest* request,
+ BazelBlob const* x) {
*(request->add_requests()) =
- this->CreateUpdateBlobsSingleRequest(x);
+ BazelCasClient::CreateUpdateBlobsSingleRequest(*x);
});
- result.reserve(std::distance(start, end));
+ result.reserve(std::distance(begin, end));
auto batch_update_blobs =
[this, &result](auto const& request) -> RetryResponse {
bazel_re::BatchUpdateBlobsResponse response;
@@ -557,11 +549,11 @@ auto BazelCasClient::DoBatchUpdateBlobs(std::string const& instance_name,
} catch (...) {
logger_.Emit(LogLevel::Error, "Caught exception in DoBatchUpdateBlobs");
}
- logger_.Emit(LogLevel::Trace, [&start, &end, &result]() {
+ logger_.Emit(LogLevel::Trace, [begin, end, &result]() {
std::ostringstream oss{};
oss << "upload blobs" << std::endl;
- std::for_each(start, end, [&oss](auto const& blob) {
- oss << fmt::format(" - {}", blob.digest.hash()) << std::endl;
+ std::for_each(begin, end, [&oss](BazelBlob const* blob) {
+ oss << fmt::format(" - {}", blob->digest.hash()) << std::endl;
});
oss << "received blobs" << std::endl;
std::for_each(
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 69db091f..4b669ab8 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp
@@ -24,6 +24,7 @@
#include <vector>
#include "build/bazel/remote/execution/v2/remote_execution.grpc.pb.h"
+#include "gsl/gsl"
#include "src/buildtool/common/bazel_types.hpp"
#include "src/buildtool/common/remote/port.hpp"
#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp"
@@ -63,9 +64,10 @@ class BazelCasClient {
/// \returns The digests of blobs successfully updated
[[nodiscard]] auto BatchUpdateBlobs(
std::string const& instance_name,
- std::vector<BazelBlob>::const_iterator const& begin,
- std::vector<BazelBlob>::const_iterator const& end) noexcept
- -> std::size_t;
+ std::vector<gsl::not_null<BazelBlob const*>>::const_iterator const&
+ begin,
+ std::vector<gsl::not_null<BazelBlob const*>>::const_iterator const&
+ end) noexcept -> std::size_t;
/// \brief Read multiple blobs in batch transfer
/// \param[in] instance_name Name of the CAS instance
@@ -144,12 +146,6 @@ class BazelCasClient {
T_OutputIter const& end) noexcept
-> std::vector<bazel_re::Digest>;
- template <class T_OutputIter>
- [[nodiscard]] auto DoBatchUpdateBlobs(std::string const& instance_name,
- T_OutputIter const& start,
- T_OutputIter const& end) noexcept
- -> std::size_t;
-
template <typename T_Request, typename T_ForwardIter>
[[nodiscard]] auto CreateBatchRequestsMaxSize(
std::string const& instance_name,
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
index 2d434bde..325abd02 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp
@@ -188,17 +188,23 @@ auto BazelNetwork::DoUploadBlobs(T_Iter const& first,
//
// The blobs belonging to the second group are uploaded via the
// bytestream api.
- std::vector<typename T_Iter::value_type> sorted(first, last);
+ std::vector<gsl::not_null<BazelBlob const*>> sorted;
+ sorted.reserve(std::distance(first, last));
+ std::transform(
+ first, last, std::back_inserter(sorted), [](BazelBlob const& b) {
+ return &b;
+ });
+
auto it = std::stable_partition(
- sorted.begin(), sorted.end(), [](auto const& x) {
- return x.data.size() <= kMaxBatchTransferSize;
+ sorted.begin(), sorted.end(), [](BazelBlob const* x) {
+ return x->data.size() <= kMaxBatchTransferSize;
});
auto digests_count =
cas_->BatchUpdateBlobs(instance_name_, sorted.begin(), it);
return digests_count == std::distance(sorted.begin(), it) &&
- std::all_of(it, sorted.end(), [this](auto const& x) {
- return cas_->UpdateSingleBlob(instance_name_, x);
+ std::all_of(it, sorted.end(), [this](BazelBlob const* x) {
+ return cas_->UpdateSingleBlob(instance_name_, *x);
});
} catch (...) {
Logger::Log(LogLevel::Warning, "Unknown exception");