diff options
Diffstat (limited to 'src')
4 files changed, 35 insertions, 17 deletions
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index 2f54a377..b76c3877 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -52,7 +52,7 @@ namespace { [[nodiscard]] auto RetrieveToCas( - std::vector<bazel_re::Digest> const& digests, + std::vector<ArtifactDigest> const& digests, IExecutionApi const& api, std::shared_ptr<BazelNetwork> const& network, std::unordered_map<ArtifactDigest, Artifact::ObjectInfo> const& @@ -121,16 +121,8 @@ namespace { std::vector<ArtifactDigest>{digest_set.begin(), digest_set.end()}; auto missing_artifact_digests = other_api.IsAvailable(unique_digests); - - auto missing_digests = std::vector<bazel_re::Digest>{}; - missing_digests.reserve(digest_set.size()); - std::transform(missing_artifact_digests.begin(), - missing_artifact_digests.end(), - std::back_inserter(missing_digests), - [](auto const& digest) { - return static_cast<bazel_re::Digest>(digest); - }); - if (not ::RetrieveToCas(missing_digests, other_api, network, info_map)) { + if (not ::RetrieveToCas( + missing_artifact_digests, other_api, network, info_map)) { return false; } @@ -241,7 +233,7 @@ auto BazelApi::CreateAction( } // Obtain file digests from artifact infos - std::vector<bazel_re::Digest> file_digests{}; + std::vector<ArtifactDigest> file_digests{}; std::vector<std::size_t> artifact_pos{}; for (std::size_t i{}; i < artifacts_info.size(); ++i) { auto const& info = artifacts_info[i]; @@ -276,7 +268,7 @@ auto BazelApi::CreateAction( auto size = file_digests.size(); auto reader = network_->CreateReader(); std::size_t count{}; - for (auto blobs : reader.ReadIncrementally(std::move(file_digests))) { + for (auto blobs : reader.ReadIncrementally(file_digests)) { if (count + blobs.size() > size) { Logger::Log(LogLevel::Warning, "received more blobs than requested."); @@ -344,7 +336,7 @@ auto BazelApi::CreateAction( } // Recursively process trees. - std::vector<bazel_re::Digest> blob_digests{}; + std::vector<ArtifactDigest> blob_digests{}; for (auto const& dgst : missing_artifacts_info->digests) { auto const& info = missing_artifacts_info->back_map[dgst]; if (IsTreeObject(info.type)) { 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 690a1278..bb21c5e0 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp @@ -156,7 +156,7 @@ auto BazelNetworkReader::MakeAuxiliaryMap( return result; } -auto BazelNetworkReader::ReadSingleBlob(ArtifactDigest const& digest) +auto BazelNetworkReader::ReadSingleBlob(bazel_re::Digest const& digest) const noexcept -> std::optional<ArtifactBlob> { auto blob = cas_.ReadSingleBlob(instance_name_, digest); if (blob and Validate(*blob)) { @@ -166,6 +166,25 @@ auto BazelNetworkReader::ReadSingleBlob(ArtifactDigest const& digest) return std::nullopt; } +auto BazelNetworkReader::ReadSingleBlob(ArtifactDigest const& digest) + const noexcept -> std::optional<ArtifactBlob> { + return ReadSingleBlob(static_cast<bazel_re::Digest>(digest)); +} + +auto BazelNetworkReader::ReadIncrementally( + std::vector<ArtifactDigest> const& digests) const noexcept + -> IncrementalReader { + 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 static_cast<bazel_re::Digest>(d); + }); + return ReadIncrementally(std::move(bazel_digests)); +} + auto BazelNetworkReader::ReadIncrementally( std::vector<bazel_re::Digest> digests) const noexcept -> IncrementalReader { return IncrementalReader{*this, std::move(digests)}; @@ -255,7 +274,7 @@ auto BazelNetworkReader::IncrementalReader::iterator::operator*() const noexcept std::vector<bazel_re::Digest> request{begin_, current_}; return owner_.BatchReadBlobs(request); } - if (auto blob = owner_.ReadSingleBlob(ArtifactDigest{*begin_})) { + if (auto blob = owner_.ReadSingleBlob(*begin_)) { return {std::move(*blob)}; } } 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 be16f211..f009d968 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp @@ -62,9 +62,16 @@ class BazelNetworkReader final { DumpCallback const& dumper) const noexcept -> bool; + [[nodiscard]] auto ReadSingleBlob(bazel_re::Digest const& digest) + const noexcept -> std::optional<ArtifactBlob>; + [[nodiscard]] auto ReadSingleBlob(ArtifactDigest const& digest) const noexcept -> std::optional<ArtifactBlob>; + [[nodiscard]] auto ReadIncrementally( + std::vector<ArtifactDigest> const& digests) const noexcept + -> IncrementalReader; + [[nodiscard]] auto ReadIncrementally(std::vector<bazel_re::Digest> digests) const noexcept -> IncrementalReader; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index 914836fe..f56f9992 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -41,7 +41,7 @@ auto ProcessDirectoryMessage(HashFunction hash_function, auto BazelResponse::ReadStringBlob(bazel_re::Digest const& id) noexcept -> std::string { auto reader = network_->CreateReader(); - if (auto blob = reader.ReadSingleBlob(ArtifactDigest{id})) { + if (auto blob = reader.ReadSingleBlob(id)) { return *blob->data; } Logger::Log(LogLevel::Warning, |