From 417d7ab4db05b5f1a1cee464b7f43f09a8bc5568 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Fri, 7 Feb 2025 17:27:48 +0100 Subject: BazelCasClient: replace ProcessResponseContents ...with direct access to mutable fields and drop additional deep copies. --- .../remote/bazel/bazel_cas_client.cpp | 58 ++++------------------ .../remote/bazel/bazel_cas_client.hpp | 4 -- 2 files changed, 11 insertions(+), 51 deletions(-) (limited to 'src') 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 8a3eb335..0ce8e67c 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -25,7 +25,6 @@ #include -#include "google/protobuf/message.h" #include "google/protobuf/repeated_ptr_field.h" #include "src/buildtool/common/artifact_digest_factory.hpp" #include "src/buildtool/common/bazel_digest_factory.hpp" @@ -280,7 +279,9 @@ auto BazelCasClient::GetTree(std::string const& instance_name, std::vector result; while (stream->Read(&response)) { - result = ProcessResponseContents(response); + std::move(response.mutable_directories()->begin(), + response.mutable_directories()->end(), + std::back_inserter(result)); auto const& next_page_token = response.next_page_token(); if (not next_page_token.empty()) { // recursively call this function with token for next page @@ -373,7 +374,12 @@ auto BazelCasClient::SplitBlob(HashFunction hash_function, LogStatus(&logger_, LogLevel::Error, status, "SplitBlob"); return std::nullopt; } - return ProcessResponseContents(response); + std::vector result; + result.reserve(response.chunk_digests().size()); + std::move(response.mutable_chunk_digests()->begin(), + response.mutable_chunk_digests()->end(), + std::back_inserter(result)); + return result; } auto BazelCasClient::SpliceBlob( @@ -462,8 +468,8 @@ auto BazelCasClient::FindMissingBlobs( retry_config_, logger_); if (ok) { - for (auto& batch : - ProcessResponseContents(response)) { + for (auto const& batch : + *response.mutable_missing_blob_digests()) { if (auto value = back_map->GetReference(batch)) { result.emplace(*value.value()); } @@ -603,39 +609,6 @@ auto BazelCasClient::BatchUpdateBlobs(std::string const& instance_name, return updated.size(); } -namespace detail { - -// Getter for response contents (needs specialization, never implemented) -template -static auto GetResponseContents(TResponse const&) noexcept - -> pb::RepeatedPtrField const&; - -// Specialization of GetResponseContents for 'FindMissingBlobsResponse' -template <> -auto GetResponseContents( - bazel_re::FindMissingBlobsResponse const& response) noexcept - -> pb::RepeatedPtrField const& { - return response.missing_blob_digests(); -} - -// Specialization of GetResponseContents for 'GetTreeResponse' -template <> -auto GetResponseContents( - bazel_re::GetTreeResponse const& response) noexcept - -> pb::RepeatedPtrField const& { - return response.directories(); -} - -// Specialization of GetResponseContents for 'SplitBlobResponse' -template <> -auto GetResponseContents( - bazel_re::SplitBlobResponse const& response) noexcept - -> pb::RepeatedPtrField const& { - return response.chunk_digests(); -} - -} // namespace detail - template auto BazelCasClient::CreateBatchRequestsMaxSize( std::string const& instance_name, @@ -704,12 +677,3 @@ auto BazelCasClient::CreateGetTreeRequest( request.set_page_token(page_token); return request; } - -template -auto BazelCasClient::ProcessResponseContents( - TResponse const& response) const noexcept -> std::vector { - std::vector output; - auto const& contents = detail::GetResponseContents(response); - std::copy(contents.begin(), contents.end(), std::back_inserter(output)); - return output; -} 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 e690e58f..3217dcf2 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp @@ -202,10 +202,6 @@ class BazelCasClient { } return {.ok = true, .result = std::move(output)}; } - - template - auto ProcessResponseContents(TResponse const& response) const noexcept - -> std::vector; }; #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_REMOTE_BAZEL_BAZEL_CAS_CLIENT_HPP -- cgit v1.2.3