summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_api.cpp6
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp48
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp29
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_response.cpp2
-rw-r--r--test/buildtool/execution_api/bazel/bazel_network.test.cpp4
5 files changed, 41 insertions, 48 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
index 0bfacf3f..bee70424 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp
@@ -64,7 +64,7 @@ namespace {
auto reader = network->CreateReader();
std::size_t count{};
std::unordered_set<ArtifactBlob> container{};
- for (auto blobs : reader.ReadIncrementally(digests)) {
+ for (auto blobs : reader.ReadIncrementally(&digests)) {
if (count + blobs.size() > size) {
Logger::Log(LogLevel::Warning,
"received more blobs than requested.");
@@ -248,7 +248,7 @@ auto BazelApi::CreateAction(
auto size = file_digests.size();
auto reader = network_->CreateReader();
std::size_t count{};
- for (auto blobs : reader.ReadIncrementally(file_digests)) {
+ for (auto blobs : reader.ReadIncrementally(&file_digests)) {
if (count + blobs.size() > size) {
Logger::Log(LogLevel::Warning,
"received more blobs than requested.");
@@ -556,7 +556,7 @@ auto BazelApi::CreateAction(
gsl::not_null<std::vector<std::string>*> const& targets) {
auto reader = network->CreateReader();
targets->reserve(digests.size());
- for (auto blobs : reader.ReadIncrementally(digests)) {
+ for (auto blobs : reader.ReadIncrementally(&digests)) {
for (auto const& blob : blobs) {
targets->emplace_back(*blob.data);
}
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
index c5c66c81..f784fd09 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp
@@ -15,9 +15,9 @@
#include "src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp"
#include <algorithm>
-#include <cstdint>
#include <filesystem>
#include <memory>
+#include <utility>
#include "src/buildtool/common/artifact_digest_factory.hpp"
#include "src/buildtool/common/bazel_digest_factory.hpp"
@@ -87,7 +87,7 @@ auto BazelNetworkReader::ReadGitTree(ArtifactDigest const& digest)
auto check_symlinks = [this](std::vector<ArtifactDigest> const& ids) {
size_t const size = ids.size();
size_t count = 0;
- for (auto blobs : ReadIncrementally(ids)) {
+ for (auto blobs : ReadIncrementally(&ids)) {
if (count + blobs.size() > size) {
Logger::Log(LogLevel::Debug,
"received more blobs than requested.");
@@ -193,29 +193,25 @@ auto BazelNetworkReader::ReadSingleBlob(ArtifactDigest const& digest)
}
auto BazelNetworkReader::ReadIncrementally(
+ gsl::not_null<std::vector<ArtifactDigest> const*> const& digests)
+ const noexcept -> IncrementalReader {
+ return IncrementalReader{*this, digests};
+}
+
+auto BazelNetworkReader::BatchReadBlobs(
std::vector<ArtifactDigest> const& digests) const noexcept
- -> IncrementalReader {
+ -> std::vector<ArtifactBlob> {
std::vector<bazel_re::Digest> bazel_digests;
bazel_digests.reserve(digests.size());
std::transform(digests.begin(),
digests.end(),
std::back_inserter(bazel_digests),
- [](ArtifactDigest const& d) {
- return ArtifactDigestFactory::ToBazel(d);
+ [](ArtifactDigest const& digest) {
+ return ArtifactDigestFactory::ToBazel(digest);
});
- return ReadIncrementally(std::move(bazel_digests));
-}
-auto BazelNetworkReader::ReadIncrementally(
- std::vector<bazel_re::Digest> digests) const noexcept -> IncrementalReader {
- return IncrementalReader{*this, std::move(digests)};
-}
-
-auto BazelNetworkReader::BatchReadBlobs(
- std::vector<bazel_re::Digest> const& blobs) const noexcept
- -> std::vector<ArtifactBlob> {
- std::vector<BazelBlob> const result =
- cas_.BatchReadBlobs(instance_name_, blobs.begin(), blobs.end());
+ std::vector<BazelBlob> const result = cas_.BatchReadBlobs(
+ instance_name_, bazel_digests.begin(), bazel_digests.end());
std::vector<ArtifactBlob> artifacts;
artifacts.reserve(result.size());
@@ -259,11 +255,11 @@ auto BazelNetworkReader::Validate(BazelBlob const& blob) const noexcept
namespace {
[[nodiscard]] auto FindBorderIterator(
- std::vector<bazel_re::Digest>::const_iterator const& begin,
- std::vector<bazel_re::Digest>::const_iterator const& end) noexcept {
- std::int64_t size = 0;
+ std::vector<ArtifactDigest>::const_iterator const& begin,
+ std::vector<ArtifactDigest>::const_iterator const& end) noexcept {
+ std::size_t size = 0;
for (auto it = begin; it != end; ++it) {
- std::int64_t const blob_size = it->size_bytes();
+ std::size_t const blob_size = it->size();
size += blob_size;
if (blob_size == 0 or size > kMaxBatchTransferSize) {
return it;
@@ -273,8 +269,8 @@ namespace {
}
[[nodiscard]] auto FindCurrentIterator(
- std::vector<bazel_re::Digest>::const_iterator const& begin,
- std::vector<bazel_re::Digest>::const_iterator const& end) noexcept {
+ std::vector<ArtifactDigest>::const_iterator const& begin,
+ std::vector<ArtifactDigest>::const_iterator const& end) noexcept {
auto it = FindBorderIterator(begin, end);
if (it == begin and begin != end) {
++it;
@@ -285,8 +281,8 @@ namespace {
BazelNetworkReader::IncrementalReader::Iterator::Iterator(
BazelNetworkReader const& owner,
- std::vector<bazel_re::Digest>::const_iterator begin,
- std::vector<bazel_re::Digest>::const_iterator end) noexcept
+ std::vector<ArtifactDigest>::const_iterator begin,
+ std::vector<ArtifactDigest>::const_iterator end) noexcept
: owner_{owner}, begin_{begin}, end_{end} {
current_ = FindCurrentIterator(begin_, end_);
}
@@ -295,7 +291,7 @@ auto BazelNetworkReader::IncrementalReader::Iterator::operator*() const noexcept
-> value_type {
if (begin_ != current_) {
if (std::distance(begin_, current_) > 1) {
- std::vector<bazel_re::Digest> request{begin_, current_};
+ std::vector<ArtifactDigest> request{begin_, current_};
return owner_.BatchReadBlobs(request);
}
if (auto blob = owner_.ReadSingleBlob(*begin_)) {
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp
index 54be0008..0688e83d 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp
@@ -22,7 +22,6 @@
#include <optional>
#include <string>
#include <unordered_map>
-#include <utility>
#include <vector>
#include "gsl/gsl"
@@ -78,8 +77,8 @@ class BazelNetworkReader final {
const noexcept -> std::optional<ArtifactBlob>;
[[nodiscard]] auto ReadIncrementally(
- std::vector<ArtifactDigest> const& digests) const noexcept
- -> IncrementalReader;
+ gsl::not_null<std::vector<ArtifactDigest> const*> const& digests)
+ const noexcept -> IncrementalReader;
private:
using DirectoryMap =
@@ -98,21 +97,19 @@ class BazelNetworkReader final {
const noexcept -> std::optional<ArtifactBlob>;
[[nodiscard]] auto BatchReadBlobs(
- std::vector<bazel_re::Digest> const& blobs) const noexcept
+ std::vector<ArtifactDigest> const& digests) const noexcept
-> std::vector<ArtifactBlob>;
- [[nodiscard]] auto ReadIncrementally(std::vector<bazel_re::Digest> digests)
- const noexcept -> IncrementalReader;
-
[[nodiscard]] auto Validate(BazelBlob const& blob) const noexcept
-> std::optional<HashInfo>;
};
class BazelNetworkReader::IncrementalReader final {
public:
- IncrementalReader(BazelNetworkReader const& owner,
- std::vector<bazel_re::Digest> digests) noexcept
- : owner_(owner), digests_(std::move(digests)) {}
+ IncrementalReader(
+ BazelNetworkReader const& owner,
+ gsl::not_null<std::vector<ArtifactDigest> const*> digests) noexcept
+ : owner_(owner), digests_(*digests) {}
class Iterator final {
public:
@@ -123,8 +120,8 @@ class BazelNetworkReader::IncrementalReader final {
using iterator_category = std::forward_iterator_tag;
Iterator(BazelNetworkReader const& owner,
- std::vector<bazel_re::Digest>::const_iterator begin,
- std::vector<bazel_re::Digest>::const_iterator end) noexcept;
+ std::vector<ArtifactDigest>::const_iterator begin,
+ std::vector<ArtifactDigest>::const_iterator end) noexcept;
auto operator*() const noexcept -> value_type;
auto operator++() noexcept -> Iterator&;
@@ -144,9 +141,9 @@ class BazelNetworkReader::IncrementalReader final {
private:
BazelNetworkReader const& owner_;
- std::vector<bazel_re::Digest>::const_iterator begin_;
- std::vector<bazel_re::Digest>::const_iterator end_;
- std::vector<bazel_re::Digest>::const_iterator current_;
+ std::vector<ArtifactDigest>::const_iterator begin_;
+ std::vector<ArtifactDigest>::const_iterator end_;
+ std::vector<ArtifactDigest>::const_iterator current_;
};
[[nodiscard]] auto begin() const noexcept {
@@ -159,7 +156,7 @@ class BazelNetworkReader::IncrementalReader final {
private:
BazelNetworkReader const& owner_;
- std::vector<bazel_re::Digest> digests_;
+ std::vector<ArtifactDigest> const& digests_;
};
#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_REMOTE_BAZEL_BAZEL_TREE_READER_HPP
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
index ad418000..81f8310d 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp
@@ -238,7 +238,7 @@ auto BazelResponse::Populate() noexcept -> std::optional<std::string> {
// collect root digests from trees and store them
auto reader = network_->CreateReader();
int pos = 0;
- for (auto tree_blobs : reader.ReadIncrementally(tree_digests)) {
+ for (auto tree_blobs : reader.ReadIncrementally(&tree_digests)) {
for (auto const& tree_blob : tree_blobs) {
try {
auto tree = BazelMsgFactory::MessageFromString<bazel_re::Tree>(
diff --git a/test/buildtool/execution_api/bazel/bazel_network.test.cpp b/test/buildtool/execution_api/bazel/bazel_network.test.cpp
index 5444c5d5..50564163 100644
--- a/test/buildtool/execution_api/bazel/bazel_network.test.cpp
+++ b/test/buildtool/execution_api/bazel/bazel_network.test.cpp
@@ -102,7 +102,7 @@ TEST_CASE("Bazel network: write/read blobs", "[execution_api]") {
std::vector<ArtifactDigest> to_read{
foo.digest, bar.digest, baz.digest, bar.digest, foo.digest};
std::vector<ArtifactBlob> blobs{};
- for (auto next : reader.ReadIncrementally(to_read)) {
+ for (auto next : reader.ReadIncrementally(&to_read)) {
blobs.insert(blobs.end(), next.begin(), next.end());
}
@@ -169,7 +169,7 @@ TEST_CASE("Bazel network: read blobs with unknown size", "[execution_api]") {
auto reader = network.CreateReader();
std::vector<ArtifactDigest> to_read{foo.digest, bar.digest};
std::vector<ArtifactBlob> blobs{};
- for (auto next : reader.ReadIncrementally(to_read)) {
+ for (auto next : reader.ReadIncrementally(&to_read)) {
blobs.insert(blobs.end(), next.begin(), next.end());
}