diff options
author | Oliver Reiche <oliver.reiche@gmail.com> | 2023-04-15 16:28:33 +0200 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-04-26 18:29:44 +0200 |
commit | d762bfa1953933dfac0a29a74523c25719396b8c (patch) | |
tree | 1002b0aecc1af698f0349a4efb4bfc169886c60a /src/buildtool/execution_api | |
parent | 03e1019aca5d08e53bfeb455071d91561fc33039 (diff) | |
download | justbuild-d762bfa1953933dfac0a29a74523c25719396b8c.tar.gz |
imports: Switch to Microsoft GSL implementation
... with two minor code base changes compared to previous
use of gsl-lite:
- dag.hpp: ActionNode::Ptr and ArtifactNode::Ptr are not
wrapped in gsl::not_null<> anymore, due to lack of support
for wrapping std::unique_ptr<>. More specifically, the
move constructor is missing, rendering it impossible to
use std::vector<>::emplace_back().
- utils/cpp/gsl.hpp: New header file added to implement the
macros ExpectsAudit() and EnsureAudit(), asserts running
only in debug builds, which were available in gsl-lite but
are missing in MS GSL.
Diffstat (limited to 'src/buildtool/execution_api')
31 files changed, 168 insertions, 151 deletions
diff --git a/src/buildtool/execution_api/bazel_msg/TARGETS b/src/buildtool/execution_api/bazel_msg/TARGETS index c83fac48..31bbc5df 100644 --- a/src/buildtool/execution_api/bazel_msg/TARGETS +++ b/src/buildtool/execution_api/bazel_msg/TARGETS @@ -12,6 +12,7 @@ , "private-deps": [ ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/file_system", "git_cas"] + , ["src/utils/cpp", "gsl"] ] } , "bazel_msg_factory": @@ -30,7 +31,7 @@ , "private-deps": [ ["src/buildtool/compatibility", "compatibility"] , ["src/utils/cpp", "hex_string"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/file_system", "file_system_manager"] ] , "stage": ["src", "buildtool", "execution_api", "bazel_msg"] @@ -41,7 +42,7 @@ , "hdrs": ["directory_tree.hpp"] , "srcs": ["directory_tree.cpp"] , "deps": - [ ["@", "gsl-lite", "", "gsl-lite"] + [ ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "common"] , ["src/buildtool/execution_engine/dag", "dag"] ] @@ -59,7 +60,7 @@ , "deps": [ "bazel_msg" , "directory_tree" - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/compatibility", "compatibility"] ] , "private-deps": diff --git a/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp b/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp index 5ebc72bd..50552126 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp @@ -21,7 +21,7 @@ #include <utility> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" #include "src/utils/cpp/concepts.hpp" @@ -168,7 +168,7 @@ class BlobContainer { public: explicit digest_to_blob( gsl::not_null<underlaying_map_t const*> blobs) noexcept - : blobs_{std::move(blobs)} {} + : blobs_{blobs} {} digest_to_blob(digest_to_blob const& other) noexcept = default; digest_to_blob(digest_to_blob&& other) noexcept = default; ~digest_to_blob() noexcept = default; diff --git a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp index c89a6323..5f392483 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp @@ -24,7 +24,7 @@ #include <string> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" diff --git a/src/buildtool/execution_api/bazel_msg/blob_tree.hpp b/src/buildtool/execution_api/bazel_msg/blob_tree.hpp index 786e3c55..781150da 100644 --- a/src/buildtool/execution_api/bazel_msg/blob_tree.hpp +++ b/src/buildtool/execution_api/bazel_msg/blob_tree.hpp @@ -21,7 +21,7 @@ #include <utility> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" #include "src/buildtool/execution_api/bazel_msg/directory_tree.hpp" @@ -34,12 +34,7 @@ using BlobTreePtr = gsl::not_null<std::shared_ptr<BlobTree>>; class BlobTree { public: BlobTree(BazelBlob blob, std::vector<BlobTreePtr> nodes) - : blob_{std::move(blob)} { - nodes_.reserve(nodes.size()); - for (auto& node : nodes) { - nodes_.emplace_back(std::move(node)); - } - } + : blob_{std::move(blob)}, nodes_{std::move(nodes)} {} [[nodiscard]] auto Blob() const noexcept -> BazelBlob { return blob_; } [[nodiscard]] auto IsTree() const noexcept -> bool { diff --git a/src/buildtool/execution_api/bazel_msg/directory_tree.cpp b/src/buildtool/execution_api/bazel_msg/directory_tree.cpp index a7951f90..25e17ee6 100644 --- a/src/buildtool/execution_api/bazel_msg/directory_tree.cpp +++ b/src/buildtool/execution_api/bazel_msg/directory_tree.cpp @@ -17,6 +17,7 @@ #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/logging/logger.hpp" +#include "src/utils/cpp/gsl.hpp" auto DirectoryTree::AddArtifact(std::filesystem::path const& path, Artifact const* artifact) noexcept -> bool { @@ -53,7 +54,7 @@ auto DirectoryTree::FromNamedArtifacts( auto DirectoryTree::AddArtifact(std::filesystem::path::iterator* begin, std::filesystem::path::iterator const& end, Artifact const* artifact) -> bool { - gsl_ExpectsAudit(std::distance(*begin, end) > 0); + ExpectsAudit(std::distance(*begin, end) > 0); auto segment = *((*begin)++); if (segment == "." or segment == "..") { // fail on "." and ".." return false; diff --git a/src/buildtool/execution_api/bazel_msg/directory_tree.hpp b/src/buildtool/execution_api/bazel_msg/directory_tree.hpp index 968c8899..5436be9e 100644 --- a/src/buildtool/execution_api/bazel_msg/directory_tree.hpp +++ b/src/buildtool/execution_api/bazel_msg/directory_tree.hpp @@ -23,7 +23,7 @@ #include <variant> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/execution_engine/dag/dag.hpp" diff --git a/src/buildtool/execution_api/common/TARGETS b/src/buildtool/execution_api/common/TARGETS index 2c7ca6cf..4e4bf796 100644 --- a/src/buildtool/execution_api/common/TARGETS +++ b/src/buildtool/execution_api/common/TARGETS @@ -8,12 +8,13 @@ , "execution_response.hpp" ] , "deps": - [ ["@", "gsl-lite", "", "gsl-lite"] + [ ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "common"] , ["src/buildtool/crypto", "hash_function"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/utils/cpp", "hex_string"] + , ["src/utils/cpp", "gsl"] , ["src/buildtool/logging", "logging"] ] , "stage": ["src", "buildtool", "execution_api", "common"] diff --git a/src/buildtool/execution_api/common/execution_action.hpp b/src/buildtool/execution_api/common/execution_action.hpp index d3089f81..649c634c 100644 --- a/src/buildtool/execution_api/common/execution_action.hpp +++ b/src/buildtool/execution_api/common/execution_action.hpp @@ -18,7 +18,7 @@ #include <chrono> #include <memory> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/execution_api/common/execution_response.hpp" class Logger; diff --git a/src/buildtool/execution_api/common/execution_api.hpp b/src/buildtool/execution_api/common/execution_api.hpp index ffa31483..7a301f71 100644 --- a/src/buildtool/execution_api/common/execution_api.hpp +++ b/src/buildtool/execution_api/common/execution_api.hpp @@ -21,7 +21,7 @@ #include <utility> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" // Artifact::ObjectInfo #include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" diff --git a/src/buildtool/execution_api/common/execution_common.hpp b/src/buildtool/execution_api/common/execution_common.hpp index 51e62455..d9aea07f 100644 --- a/src/buildtool/execution_api/common/execution_common.hpp +++ b/src/buildtool/execution_api/common/execution_common.hpp @@ -30,9 +30,10 @@ #include <string> #include <thread> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/crypto/hash_function.hpp" #include "src/buildtool/logging/logger.hpp" +#include "src/utils/cpp/gsl.hpp" #include "src/utils/cpp/hex_string.hpp" /// \brief Create unique ID for current process and thread. @@ -80,7 +81,7 @@ static void EncodeUUIDVersion4(std::string* uuid) { constexpr auto kVersionByte = 6UL; constexpr auto kVersionBits = 0x40U; // version 4: 0100 xxxx constexpr auto kClearMask = 0x0fU; - gsl_Expects(uuid->size() >= kVersionByte); + Expects(uuid->size() >= kVersionByte); auto& byte = uuid->at(kVersionByte); byte = static_cast<char>(kVersionBits | (kClearMask & static_cast<std::uint8_t>(byte))); @@ -90,7 +91,7 @@ static void EncodeUUIDVariant1(std::string* uuid) { constexpr auto kVariantByte = 8UL; constexpr auto kVariantBits = 0x80U; // variant 1: 10xx xxxx constexpr auto kClearMask = 0x3fU; - gsl_Expects(uuid->size() >= kVariantByte); + Expects(uuid->size() >= kVariantByte); auto& byte = uuid->at(kVariantByte); byte = static_cast<char>(kVariantBits | (kClearMask & static_cast<std::uint8_t>(byte))); @@ -106,7 +107,7 @@ static void EncodeUUIDVariant1(std::string* uuid) { auto uuid = HashFunction::ComputeHash(value).Bytes(); EncodeUUIDVersion4(&uuid); EncodeUUIDVariant1(&uuid); - gsl_Expects(uuid.size() >= kRawLength); + Expects(uuid.size() >= kRawLength); std::size_t cur{}; std::ostringstream ss{}; @@ -116,7 +117,7 @@ static void EncodeUUIDVariant1(std::string* uuid) { cur = pos; } ss << uuid_hex.substr(cur); - gsl_EnsuresAudit(ss.str().size() == (2 * kRawLength) + kHexDashPos.size()); + EnsuresAudit(ss.str().size() == (2 * kRawLength) + kHexDashPos.size()); return ss.str(); } diff --git a/src/buildtool/execution_api/common/execution_response.hpp b/src/buildtool/execution_api/common/execution_response.hpp index deb8186f..a08134dd 100644 --- a/src/buildtool/execution_api/common/execution_response.hpp +++ b/src/buildtool/execution_api/common/execution_response.hpp @@ -20,7 +20,7 @@ #include <unordered_map> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" /// \brief Abstract response. diff --git a/src/buildtool/execution_api/execution_service/TARGETS b/src/buildtool/execution_api/execution_service/TARGETS index 7227c8e4..26bf08e7 100644 --- a/src/buildtool/execution_api/execution_service/TARGETS +++ b/src/buildtool/execution_api/execution_service/TARGETS @@ -13,7 +13,7 @@ ] , "private-deps": [ ["@", "fmt", "", "fmt"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/storage", "storage"] , ["src/buildtool/file_system", "file_system_manager"] , "operation_cache" diff --git a/src/buildtool/execution_api/execution_service/execution_server.cpp b/src/buildtool/execution_api/execution_service/execution_server.cpp index ed22e023..c34201a1 100644 --- a/src/buildtool/execution_api/execution_service/execution_server.cpp +++ b/src/buildtool/execution_api/execution_service/execution_server.cpp @@ -22,7 +22,7 @@ #include "execution_server.hpp" #include "fmt/format.h" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/execution_api/execution_service/operation_cache.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/storage/garbage_collector.hpp" diff --git a/src/buildtool/execution_api/git/TARGETS b/src/buildtool/execution_api/git/TARGETS index ca0f09bc..bed87ae8 100644 --- a/src/buildtool/execution_api/git/TARGETS +++ b/src/buildtool/execution_api/git/TARGETS @@ -3,7 +3,7 @@ , "name": ["git"] , "hdrs": ["git_api.hpp"] , "deps": - [ ["@", "gsl-lite", "", "gsl-lite"] + [ ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "config"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] , ["src/buildtool/execution_api/common", "common"] diff --git a/src/buildtool/execution_api/git/git_api.hpp b/src/buildtool/execution_api/git/git_api.hpp index 67207b79..2844d492 100644 --- a/src/buildtool/execution_api/git/git_api.hpp +++ b/src/buildtool/execution_api/git/git_api.hpp @@ -17,7 +17,7 @@ #include <cstdio> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" diff --git a/src/buildtool/execution_api/local/TARGETS b/src/buildtool/execution_api/local/TARGETS index 3109afca..b9e056b8 100644 --- a/src/buildtool/execution_api/local/TARGETS +++ b/src/buildtool/execution_api/local/TARGETS @@ -5,7 +5,7 @@ , "deps": [ ["@", "fmt", "", "fmt"] , ["@", "json", "", "json"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "common"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/file_system", "object_type"] @@ -25,7 +25,7 @@ , "srcs": ["local_action.cpp"] , "deps": [ ["@", "fmt", "", "fmt"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/storage", "storage"] , ["src/buildtool/execution_api/common", "common"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg_factory"] diff --git a/src/buildtool/execution_api/local/config.hpp b/src/buildtool/execution_api/local/config.hpp index a1882776..9257b758 100644 --- a/src/buildtool/execution_api/local/config.hpp +++ b/src/buildtool/execution_api/local/config.hpp @@ -20,7 +20,6 @@ #include <string> #include <vector> -#include <gsl-lite/gsl-lite.hpp> #include <nlohmann/json.hpp> #include "src/buildtool/common/artifact_digest.hpp" @@ -29,6 +28,8 @@ #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" +#include <gsl/gsl> + /// \brief Store global build system configuration. class LocalExecutionConfig { struct ConfigData { diff --git a/src/buildtool/execution_api/local/local_action.cpp b/src/buildtool/execution_api/local/local_action.cpp index 209c6a5d..764c00aa 100644 --- a/src/buildtool/execution_api/local/local_action.cpp +++ b/src/buildtool/execution_api/local/local_action.cpp @@ -17,7 +17,7 @@ #include <algorithm> #include <filesystem> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/execution_api/local/config.hpp" diff --git a/src/buildtool/execution_api/local/local_action.hpp b/src/buildtool/execution_api/local/local_action.hpp index 4fba44ba..a49060e4 100644 --- a/src/buildtool/execution_api/local/local_action.hpp +++ b/src/buildtool/execution_api/local/local_action.hpp @@ -59,14 +59,14 @@ class LocalAction final : public IExecutionAction { std::chrono::milliseconds timeout_{kDefaultTimeout}; CacheFlag cache_flag_{CacheFlag::CacheOutput}; - LocalAction(gsl::not_null<Storage const*> storage, + LocalAction(gsl::not_null<Storage const*> const& storage, ArtifactDigest root_digest, std::vector<std::string> command, std::vector<std::string> output_files, std::vector<std::string> output_dirs, std::map<std::string, std::string> env_vars, std::map<std::string, std::string> const& properties) noexcept - : storage_{std::move(storage)}, + : storage_{storage}, root_digest_{std::move(root_digest)}, cmdline_{std::move(command)}, output_files_{std::move(output_files)}, diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index c40f8471..577d771b 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -23,7 +23,7 @@ #include <vector> #include "fmt/core.h" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" diff --git a/src/buildtool/execution_api/local/local_response.hpp b/src/buildtool/execution_api/local/local_response.hpp index 93b12009..2875ec16 100644 --- a/src/buildtool/execution_api/local/local_response.hpp +++ b/src/buildtool/execution_api/local/local_response.hpp @@ -105,12 +105,13 @@ class LocalResponse final : public IExecutionResponse { LocalAction::Output output_{}; gsl::not_null<Storage const*> storage_; - explicit LocalResponse(std::string action_id, - LocalAction::Output output, - gsl::not_null<Storage const*> storage) noexcept + explicit LocalResponse( + std::string action_id, + LocalAction::Output output, + gsl::not_null<Storage const*> const& storage) noexcept : action_id_{std::move(action_id)}, output_{std::move(output)}, - storage_{std::move(storage)} {} + storage_{storage} {} }; #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_LOCAL_LOCAL_RESPONSE_HPP diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS index 68ff94b3..5a462481 100644 --- a/src/buildtool/execution_api/remote/TARGETS +++ b/src/buildtool/execution_api/remote/TARGETS @@ -23,11 +23,12 @@ [ "config" , ["src/buildtool/logging", "logging"] , ["src/buildtool/execution_api/common", "common"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["src/buildtool/auth", "auth"] , ["src/buildtool/execution_api/common", "bytestream-common"] + , ["src/utils/cpp", "gsl"] ] , "proto": [ ["@", "bazel_remote_apis", "", "remote_execution_proto"] @@ -52,7 +53,7 @@ , ["src/buildtool/execution_api/common", "common"] , ["src/buildtool/execution_api/bazel_msg", "bazel_msg"] , ["src/buildtool/execution_api/bazel_msg", "blob_tree"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] , ["src/buildtool/common", "common"] ] , "stage": ["src", "buildtool", "execution_api", "remote"] @@ -69,7 +70,7 @@ , "deps": [ ["src/buildtool/logging", "logging"] , ["src/utils/cpp", "type_safe_arithmetic"] - , ["@", "gsl-lite", "", "gsl-lite"] + , ["@", "gsl", "", "gsl"] ] , "stage": ["src", "buildtool", "execution_api", "remote"] } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp index 74542453..85759ec1 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_ac_client.cpp @@ -14,7 +14,7 @@ #include "src/buildtool/execution_api/remote/bazel/bazel_ac_client.hpp" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_client_common.hpp" diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.hpp b/src/buildtool/execution_api/remote/bazel/bazel_api.hpp index 111a09cf..6edfae5f 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.hpp @@ -20,7 +20,7 @@ #include <utility> #include <vector> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/bazel_msg/blob_tree.hpp" 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 6dd2e9e3..0c59c83d 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.cpp @@ -15,7 +15,7 @@ #include "src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp" #include "grpcpp/grpcpp.h" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/execution_api/common/execution_common.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_client_common.hpp" diff --git a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp index b1244e0c..365998a7 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.cpp @@ -15,7 +15,7 @@ #include "src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp" #include "grpcpp/grpcpp.h" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/execution_api/remote/bazel/bazel_client_common.hpp" namespace bazel_re = build::bazel::remote::execution::v2; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp index c92164ba..159a848e 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp @@ -120,50 +120,53 @@ auto BazelNetwork::IsAvailable(std::vector<bazel_re::Digest> const& digests) template <class T_Iter> auto BazelNetwork::DoUploadBlobs(T_Iter const& first, T_Iter const& last) noexcept -> bool { - auto num_blobs = gsl::narrow<std::size_t>(std::distance(first, last)); - - std::vector<bazel_re::Digest> digests{}; - digests.reserve(num_blobs); - - auto begin = first; - auto current = first; - std::size_t transfer_size{}; - while (current != last) { - auto const& blob = *current; - transfer_size += blob.data.size(); - if (transfer_size > kMaxBatchTransferSize) { - if (begin == current) { - if (cas_->UpdateSingleBlob(instance_name_, blob)) { - digests.emplace_back(blob.digest); + try { + auto num_blobs = gsl::narrow<std::size_t>(std::distance(first, last)); + + std::vector<bazel_re::Digest> digests{}; + digests.reserve(num_blobs); + + auto begin = first; + auto current = first; + std::size_t transfer_size{}; + while (current != last) { + auto const& blob = *current; + transfer_size += blob.data.size(); + if (transfer_size > kMaxBatchTransferSize) { + if (begin == current) { + if (cas_->UpdateSingleBlob(instance_name_, blob)) { + digests.emplace_back(blob.digest); + } + ++current; } - ++current; + else { + for (auto& digest : cas_->BatchUpdateBlobs( + instance_name_, begin, current)) { + digests.emplace_back(std::move(digest)); + } + } + begin = current; + transfer_size = 0; } else { - for (auto& digest : - cas_->BatchUpdateBlobs(instance_name_, begin, current)) { - digests.emplace_back(std::move(digest)); - } + ++current; } - begin = current; - transfer_size = 0; - } - else { - ++current; } - } - if (begin != current) { - for (auto& digest : - cas_->BatchUpdateBlobs(instance_name_, begin, current)) { - digests.emplace_back(std::move(digest)); + if (begin != current) { + for (auto& digest : + cas_->BatchUpdateBlobs(instance_name_, begin, current)) { + digests.emplace_back(std::move(digest)); + } } - } - if (digests.size() != num_blobs) { - Logger::Log(LogLevel::Warning, "Failed to update all blobs"); - return false; + if (digests.size() == num_blobs) { + return true; + } + } catch (...) { } - return true; + Logger::Log(LogLevel::Warning, "Failed to update all blobs"); + return false; } auto BazelNetwork::UploadBlobs(BlobContainer const& blobs, @@ -206,31 +209,37 @@ auto BazelNetwork::BlobReader::Next() noexcept -> std::vector<BazelBlob> { std::size_t size{}; std::vector<BazelBlob> blobs{}; - while (current_ != ids_.end()) { - auto blob_size = gsl::narrow<std::size_t>(current_->size_bytes()); - size += blob_size; - // read if size is 0 (unknown) or exceeds transfer size - if (blob_size == 0 or size > kMaxBatchTransferSize) { - // perform read of range [begin_, current_) - if (begin_ == current_) { - auto blob = cas_->ReadSingleBlob(instance_name_, *begin_); - if (blob) { - blobs.emplace_back(std::move(*blob)); + try { + while (current_ != ids_.end()) { + auto blob_size = gsl::narrow<std::size_t>(current_->size_bytes()); + size += blob_size; + // read if size is 0 (unknown) or exceeds transfer size + if (blob_size == 0 or size > kMaxBatchTransferSize) { + // perform read of range [begin_, current_) + if (begin_ == current_) { + auto blob = cas_->ReadSingleBlob(instance_name_, *begin_); + if (blob) { + blobs.emplace_back(std::move(*blob)); + } + ++current_; } - ++current_; - } - else { - blobs = cas_->BatchReadBlobs(instance_name_, begin_, current_); + else { + blobs = + cas_->BatchReadBlobs(instance_name_, begin_, current_); + } + begin_ = current_; + break; } - begin_ = current_; - break; + ++current_; } - ++current_; - } - if (begin_ != current_) { - blobs = cas_->BatchReadBlobs(instance_name_, begin_, current_); - begin_ = current_; + if (begin_ != current_) { + blobs = cas_->BatchReadBlobs(instance_name_, begin_, current_); + begin_ = current_; + } + } catch (std::exception const& e) { + Logger::Log(LogLevel::Error, "Reading blobs failed with: {}", e.what()); + Ensures(false); } return blobs; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp index e2c1a065..c1ae34ad 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp @@ -46,10 +46,10 @@ class BazelNetwork { std::vector<bazel_re::Digest>::const_iterator current_; BlobReader(std::string instance_name, - gsl::not_null<BazelCasClient*> cas, + gsl::not_null<BazelCasClient*> const& cas, std::vector<bazel_re::Digest> ids) : instance_name_{std::move(instance_name)}, - cas_{std::move(cas)}, + cas_{cas}, ids_{std::move(ids)}, begin_{ids_.begin()}, current_{begin_} {}; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp index ddebd648..d45d9aa1 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_response.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_response.cpp @@ -14,10 +14,11 @@ #include "src/buildtool/execution_api/remote/bazel/bazel_response.hpp" -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/compatibility/native_support.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp" #include "src/buildtool/logging/logger.hpp" +#include "src/utils/cpp/gsl.hpp" namespace { @@ -63,7 +64,7 @@ auto BazelResponse::Artifacts() const noexcept -> ArtifactInfos { if (not Compatibility::IsCompatible()) { // in native mode: just collect and store tree digests for (auto const& tree : action_result.output_directories()) { - gsl_ExpectsAudit(NativeSupport::IsTree(tree.tree_digest().hash())); + ExpectsAudit(NativeSupport::IsTree(tree.tree_digest().hash())); try { artifacts.emplace( tree.path(), diff --git a/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp b/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp index 79905b39..b9a55707 100644 --- a/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bytestream_client.hpp @@ -99,56 +99,61 @@ class ByteStreamClient { [[nodiscard]] auto Write(std::string const& resource_name, std::string const& data) const noexcept -> bool { - grpc::ClientContext ctx; - google::bytestream::WriteResponse response{}; - auto writer = stub_->Write(&ctx, &response); - - auto* allocated_data = - std::make_unique<std::string>(kChunkSize, '\0').release(); - google::bytestream::WriteRequest request{}; - request.set_resource_name(resource_name); - request.set_allocated_data(allocated_data); - std::size_t pos{}; - do { - auto const size = std::min(data.size() - pos, kChunkSize); - allocated_data->resize(size); - data.copy(allocated_data->data(), size, pos); - request.set_write_offset(static_cast<int>(pos)); - request.set_finish_write(pos + size >= data.size()); - if (not writer->Write(request)) { - // According to the docs, quote: - // If there is an error or the connection is broken during the - // `Write()`, the client should check the status of the - // `Write()` by calling `QueryWriteStatus()` and continue - // writing from the returned `committed_size`. - auto const committed_size = QueryWriteStatus(resource_name); - if (committed_size <= 0) { - logger_.Emit(LogLevel::Error, - "broken stream for upload to resource name {}", - resource_name); - return false; + try { + grpc::ClientContext ctx; + google::bytestream::WriteResponse response{}; + auto writer = stub_->Write(&ctx, &response); + + auto* allocated_data = + std::make_unique<std::string>(kChunkSize, '\0').release(); + google::bytestream::WriteRequest request{}; + request.set_resource_name(resource_name); + request.set_allocated_data(allocated_data); + std::size_t pos{}; + do { + auto const size = std::min(data.size() - pos, kChunkSize); + allocated_data->resize(size); + data.copy(allocated_data->data(), size, pos); + request.set_write_offset(static_cast<int>(pos)); + request.set_finish_write(pos + size >= data.size()); + if (not writer->Write(request)) { + // According to the docs, quote: + // If there is an error or the connection is broken during + // the `Write()`, the client should check the status of the + // `Write()` by calling `QueryWriteStatus()` and continue + // writing from the returned `committed_size`. + auto const committed_size = QueryWriteStatus(resource_name); + if (committed_size <= 0) { + logger_.Emit( + LogLevel::Error, + "broken stream for upload to resource name {}", + resource_name); + return false; + } + pos = gsl::narrow<std::size_t>(committed_size); + } + else { + pos += kChunkSize; } - pos = gsl::narrow<std::size_t>(committed_size); + } while (pos < data.size()); + if (not writer->WritesDone()) { + logger_.Emit(LogLevel::Error, + "broken stream for upload to resource name {}", + resource_name); + return false; } - else { - pos += kChunkSize; + + auto status = writer->Finish(); + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Error, status); + return false; } - } while (pos < data.size()); - if (not writer->WritesDone()) { - logger_.Emit(LogLevel::Error, - "broken stream for upload to resource name {}", - resource_name); - return false; - } - auto status = writer->Finish(); - if (not status.ok()) { - LogStatus(&logger_, LogLevel::Error, status); + return gsl::narrow<std::size_t>(response.committed_size()) == + data.size(); + } catch (...) { return false; } - - return gsl::narrow<std::size_t>(response.committed_size()) == - data.size(); } template <class T_Input> diff --git a/src/buildtool/execution_api/remote/config.hpp b/src/buildtool/execution_api/remote/config.hpp index b37e9f73..b10c3b23 100644 --- a/src/buildtool/execution_api/remote/config.hpp +++ b/src/buildtool/execution_api/remote/config.hpp @@ -23,7 +23,7 @@ #include <string> #include <utility> -#include "gsl-lite/gsl-lite.hpp" +#include "gsl/gsl" #include "src/buildtool/logging/logger.hpp" #include "src/utils/cpp/type_safe_arithmetic.hpp" |