diff options
Diffstat (limited to 'src')
3 files changed, 18 insertions, 19 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 818222db..47029bba 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -187,19 +187,19 @@ BazelCasClient::BazelCasClient( auto BazelCasClient::BatchReadBlobs( std::string const& instance_name, - std::vector<bazel_re::Digest>::const_iterator const& begin, - std::vector<bazel_re::Digest>::const_iterator const& end) const noexcept - -> std::vector<BazelBlob> { - if (begin == end) { - return {}; + std::unordered_set<bazel_re::Digest> const& blobs) const noexcept + -> std::unordered_set<BazelBlob> { + std::unordered_set<BazelBlob> result; + if (blobs.empty()) { + return result; } - std::vector<BazelBlob> result{}; try { + result.reserve(blobs.size()); auto requests = CreateBatchRequestsMaxSize<bazel_re::BatchReadBlobsRequest>( instance_name, - begin, - end, + blobs.begin(), + blobs.end(), "BatchReadBlobs", [](bazel_re::BatchReadBlobsRequest* request, bazel_re::Digest const& x) { @@ -224,7 +224,7 @@ auto BazelCasClient::BatchReadBlobs( if (batch_response.ok) { std::move(batch_response.result.begin(), batch_response.result.end(), - std::back_inserter(result)); + std::inserter(result, result.end())); return {.ok = true}; } return {.ok = false, 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 5afa38dd..f3351c8a 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp @@ -68,14 +68,12 @@ class BazelCasClient { /// \brief Read multiple blobs in batch transfer /// \param[in] instance_name Name of the CAS instance - /// \param[in] begin Start of the blob digests to read - /// \param[in] end End of the blob digests to read - /// \returns The blobs sucessfully read + /// \param[in] blobs Blob digests to read + /// \returns The blobs successfully read [[nodiscard]] auto BatchReadBlobs( std::string const& instance_name, - std::vector<bazel_re::Digest>::const_iterator const& begin, - std::vector<bazel_re::Digest>::const_iterator const& end) const noexcept - -> std::vector<BazelBlob>; + std::unordered_set<bazel_re::Digest> const& blobs) const noexcept + -> std::unordered_set<BazelBlob>; [[nodiscard]] auto GetTree(std::string const& instance_name, bazel_re::Digest const& root_digest, 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 d57991b6..0ab00dd6 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp @@ -17,6 +17,7 @@ #include <algorithm> #include <filesystem> #include <memory> +#include <unordered_set> #include <utility> #include "src/buildtool/common/artifact_digest_factory.hpp" @@ -203,15 +204,15 @@ auto BazelNetworkReader::BatchReadBlobs( std::vector<ArtifactDigest> const& digests) const noexcept -> std::vector<ArtifactBlob> { // Convert artifacts to bazel digests: - std::vector<bazel_re::Digest> bazel_digests; + std::unordered_set<bazel_re::Digest> bazel_digests; bazel_digests.reserve(digests.size()); for (ArtifactDigest const& digest : digests) { - bazel_digests.push_back(ArtifactDigestFactory::ToBazel(digest)); + bazel_digests.emplace(ArtifactDigestFactory::ToBazel(digest)); } // Batch blobs: - std::vector<BazelBlob> bazel_blobs = cas_.BatchReadBlobs( - instance_name_, bazel_digests.begin(), bazel_digests.end()); + std::unordered_set<BazelBlob> bazel_blobs = + cas_.BatchReadBlobs(instance_name_, bazel_digests); // Map digests to blobs for further lookup: auto const back_map = BackMap<bazel_re::Digest, BazelBlob>::Make( |