diff options
Diffstat (limited to 'src/buildtool/execution_api/remote')
4 files changed, 39 insertions, 46 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>( |