diff options
Diffstat (limited to 'src')
3 files changed, 29 insertions, 23 deletions
diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS index 43f3f381..01b0bf2b 100644 --- a/src/buildtool/execution_api/remote/TARGETS +++ b/src/buildtool/execution_api/remote/TARGETS @@ -30,6 +30,7 @@ , ["src/buildtool/execution_api/bazel_msg", "execution_config"] , ["src/buildtool/execution_api/common", "artifact_blob"] , ["src/buildtool/execution_api/common", "bytestream_utils"] + , ["src/buildtool/execution_api/common", "ids"] , ["src/buildtool/execution_api/common", "message_limits"] , ["src/buildtool/file_system", "git_repo"] , ["src/buildtool/logging", "log_level"] @@ -53,7 +54,6 @@ , ["src/buildtool/common", "protocol_traits"] , ["src/buildtool/common/remote", "retry"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] - , ["src/buildtool/execution_api/common", "ids"] , ["src/buildtool/file_system", "object_type"] , ["src/utils/cpp", "back_map"] , ["src/utils/cpp", "gsl"] 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 d6814b08..817a0f05 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -33,7 +33,6 @@ #include "src/buildtool/common/remote/retry.hpp" #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/execution_api/common/bytestream_utils.hpp" -#include "src/buildtool/execution_api/common/ids.hpp" #include "src/buildtool/execution_api/common/message_limits.hpp" #include "src/buildtool/file_system/object_type.hpp" #include "src/buildtool/logging/log_level.hpp" @@ -383,25 +382,14 @@ auto BazelCasClient::UpdateSingleBlob(std::string const& instance_name, return oss.str(); }); - thread_local static std::string uuid{}; - if (uuid.empty()) { - auto id = CreateProcessUniqueId(); - if (not id) { - logger_.Emit(LogLevel::Debug, "Failed creating process unique id."); - return false; - } - uuid = CreateUUIDVersion4(*id); - } - auto ok = stream_->Write( - ByteStreamUtils::WriteRequest{instance_name, uuid, blob.digest}, - *blob.data); - if (not ok) { + if (not stream_->Write(instance_name, blob)) { logger_.Emit(LogLevel::Error, "Failed to write {}:{}", blob.digest.hash(), blob.digest.size()); + return false; } - return ok; + return true; } auto BazelCasClient::IncrementalReadSingleBlob(std::string const& instance_name, diff --git a/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp b/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp index 4343393c..452c0abe 100644 --- a/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp @@ -31,7 +31,9 @@ #include "src/buildtool/auth/authentication.hpp" #include "src/buildtool/common/remote/client_common.hpp" #include "src/buildtool/common/remote/port.hpp" +#include "src/buildtool/execution_api/common/artifact_blob.hpp" #include "src/buildtool/execution_api/common/bytestream_utils.hpp" +#include "src/buildtool/execution_api/common/ids.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/utils/cpp/expected.hpp" @@ -111,19 +113,34 @@ class ByteStreamClient { return output; } - [[nodiscard]] auto Write(ByteStreamUtils::WriteRequest&& write_request, - std::string const& data) const noexcept -> bool { + [[nodiscard]] auto Write(std::string const& instance_name, + ArtifactBlob const& blob) const noexcept -> bool { + thread_local static std::string uuid{}; + if (uuid.empty()) { + auto id = CreateProcessUniqueId(); + if (not id) { + logger_.Emit(LogLevel::Debug, + "Failed creating process unique id."); + return false; + } + uuid = CreateUUIDVersion4(*id); + } + try { grpc::ClientContext ctx; google::bytestream::WriteResponse response{}; auto writer = stub_->Write(&ctx, &response); + auto const resource_name = + ByteStreamUtils::WriteRequest{instance_name, uuid, blob.digest} + .ToString(); + google::bytestream::WriteRequest request{}; - request.set_resource_name(std::move(write_request).ToString()); + request.set_resource_name(resource_name); request.mutable_data()->reserve(ByteStreamUtils::kChunkSize); auto const to_read = ::IncrementalReader::FromMemory( - ByteStreamUtils::kChunkSize, &data); + ByteStreamUtils::kChunkSize, &*blob.data); if (not to_read.has_value()) { logger_.Emit( LogLevel::Error, @@ -147,7 +164,8 @@ class ByteStreamClient { *request.mutable_data() = *chunk; request.set_write_offset(static_cast<int>(pos)); - request.set_finish_write(pos + chunk->size() >= data.size()); + request.set_finish_write(pos + chunk->size() >= + blob.data->size()); if (writer->Write(request)) { pos += chunk->size(); ++it; @@ -184,12 +202,12 @@ class ByteStreamClient { return false; } if (gsl::narrow<std::size_t>(response.committed_size()) != - data.size()) { + blob.data->size()) { logger_.Emit( LogLevel::Warning, "Commited size {} is different from the original one {}.", response.committed_size(), - data.size()); + blob.data->size()); return false; } return true; |