From dc273f4ce89dc6e562c4a99fd394c92f56eeb63f Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Fri, 24 May 2024 17:19:35 +0200 Subject: Convert BlobContainer to a template ...where the template parameter is the type of a digest. --- src/buildtool/execution_api/bazel_msg/TARGETS | 4 +- .../execution_api/bazel_msg/bazel_blob.hpp | 16 +--- .../bazel_msg/bazel_blob_container.hpp | 93 ------------------ src/buildtool/execution_api/common/TARGETS | 7 ++ .../common/content_blob_container.hpp | 105 +++++++++++++++++++++ .../execution_api/common/execution_api.hpp | 2 +- .../execution_api/remote/bazel/bazel_action.cpp | 2 +- .../execution_api/remote/bazel/bazel_api.cpp | 1 - .../remote/bazel/bazel_cas_client.hpp | 2 +- .../execution_api/remote/bazel/bazel_network.hpp | 3 +- 10 files changed, 122 insertions(+), 113 deletions(-) delete mode 100644 src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp create mode 100644 src/buildtool/execution_api/common/content_blob_container.hpp (limited to 'src/buildtool/execution_api') diff --git a/src/buildtool/execution_api/bazel_msg/TARGETS b/src/buildtool/execution_api/bazel_msg/TARGETS index 1ef91526..6b094ece 100644 --- a/src/buildtool/execution_api/bazel_msg/TARGETS +++ b/src/buildtool/execution_api/bazel_msg/TARGETS @@ -1,12 +1,12 @@ { "bazel_msg": { "type": ["@", "rules", "CC", "library"] , "name": ["bazel_msg"] - , "hdrs": ["bazel_blob.hpp", "bazel_blob_container.hpp", "bazel_common.hpp"] + , "hdrs": ["bazel_blob.hpp", "bazel_common.hpp"] , "deps": [ ["src/buildtool/common", "common"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/common", "bazel_types"] - , ["src/utils/cpp", "transformed_range"] + , ["src/buildtool/execution_api/common", "content_blob_container"] ] , "stage": ["src", "buildtool", "execution_api", "bazel_msg"] , "private-deps": diff --git a/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp b/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp index 75f174b5..bac9d273 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_blob.hpp @@ -15,20 +15,10 @@ #ifndef INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_HPP #define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_HPP -#include -#include // std::move - #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/execution_api/common/content_blob_container.hpp" -struct BazelBlob { - BazelBlob(bazel_re::Digest mydigest, std::string mydata, bool is_exec) - : digest{std::move(mydigest)}, - data{std::move(mydata)}, - is_exec{is_exec} {} - - bazel_re::Digest digest{}; - std::string data{}; - bool is_exec{}; // optional: hint to put the blob in executable CAS -}; +using BazelBlob = ContentBlob; +using BlobContainer = ContentBlobContainer; #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_HPP diff --git a/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp b/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp deleted file mode 100644 index 07c78550..00000000 --- a/src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright 2022 Huawei Cloud Computing Technology Co., Ltd. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -#ifndef INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_CONTAINER_HPP -#define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_CONTAINER_HPP - -#include -#include -#include // std::pair via auto -#include - -#include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" -#include "src/utils/cpp/transformed_range.hpp" - -/// \brief Container for Blobs -/// Can be used to iterate over digests or subset of blobs with certain digest. -class BlobContainer { - using underlaying_map_t = std::unordered_map; - - public: - BlobContainer() noexcept = default; - explicit BlobContainer(std::vector blobs) { - blobs_.reserve(blobs.size()); - for (auto& blob : blobs) { - this->Emplace(std::move(blob)); - } - } - - /// \brief Emplace new BazelBlob to container. - void Emplace(BazelBlob&& blob) { - bazel_re::Digest digest = blob.digest; - blobs_.emplace(std::move(digest), std::move(blob)); - } - - /// \brief Clear all BazelBlobs from container. - void Clear() noexcept { return blobs_.clear(); } - - /// \brief Number of BazelBlobs in container. - [[nodiscard]] auto Size() const noexcept -> std::size_t { - return blobs_.size(); - } - - /// \brief Is equivalent BazelBlob (with same Digest) in container. - /// \param[in] blob BazelBlob to search equivalent BazelBlob for - [[nodiscard]] auto Contains(BazelBlob const& blob) const noexcept -> bool { - return blobs_.contains(blob.digest); - } - - /// \brief Obtain iterable list of Blobs from container. - [[nodiscard]] auto Blobs() const noexcept { - auto converter = [](auto const& p) -> BazelBlob const& { - return p.second; - }; - return TransformedRange{ - blobs_.cbegin(), blobs_.cend(), std::move(converter)}; - } - - /// \brief Obtain iterable list of Digests from container. - [[nodiscard]] auto Digests() const noexcept { - auto converter = [](auto const& p) -> bazel_re::Digest const& { - return p.first; - }; - return TransformedRange{ - blobs_.cbegin(), blobs_.cend(), std::move(converter)}; - } - - /// \brief Obtain iterable list of BazelBlobs related to Digests. - /// \param[in] related Related Digests - [[nodiscard]] auto RelatedBlobs( - std::vector const& related) const noexcept { - auto converter = [this](auto const& digest) -> BazelBlob const& { - return blobs_.at(digest); - }; - return TransformedRange{ - related.begin(), related.end(), std::move(converter)}; - }; - - private: - underlaying_map_t blobs_{}; -}; - -#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_BAZEL_MSG_BAZEL_BLOB_CONTAINER_HPP diff --git a/src/buildtool/execution_api/common/TARGETS b/src/buildtool/execution_api/common/TARGETS index 825f612f..4cb4e4b2 100644 --- a/src/buildtool/execution_api/common/TARGETS +++ b/src/buildtool/execution_api/common/TARGETS @@ -71,4 +71,11 @@ , ["src/buildtool/logging", "log_level"] ] } +, "content_blob_container": + { "type": ["@", "rules", "CC", "library"] + , "name": ["content_blob_container"] + , "hdrs": ["content_blob_container.hpp"] + , "stage": ["src", "buildtool", "execution_api", "common"] + , "deps": [["src/utils/cpp", "transformed_range"]] + } } diff --git a/src/buildtool/execution_api/common/content_blob_container.hpp b/src/buildtool/execution_api/common/content_blob_container.hpp new file mode 100644 index 00000000..fcd10f09 --- /dev/null +++ b/src/buildtool/execution_api/common/content_blob_container.hpp @@ -0,0 +1,105 @@ +// Copyright 2024 Huawei Cloud Computing Technology Co., Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_CONTENT_BLOB_CONTAINER_HPP +#define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_CONTENT_BLOB_CONTAINER_HPP + +#include +#include +#include +#include //std::move +#include + +#include "src/utils/cpp/transformed_range.hpp" + +template +struct ContentBlob final { + ContentBlob(TDigest mydigest, std::string mydata, bool is_exec) noexcept + : digest{std::move(mydigest)}, + data{std::move(mydata)}, + is_exec{is_exec} {} + + TDigest digest{}; + std::string data{}; + bool is_exec{}; +}; + +template +class ContentBlobContainer final { + public: + using DigestType = TDigest; + using BlobType = ContentBlob; + + ContentBlobContainer() noexcept = default; + explicit ContentBlobContainer(std::vector blobs) { + blobs_.reserve(blobs.size()); + for (auto& blob : blobs) { + this->Emplace(std::move(blob)); + } + } + + /// \brief Emplace new BazelBlob to container. + void Emplace(BlobType&& blob) { + DigestType digest = blob.digest; + blobs_.emplace(std::move(digest), std::move(blob)); + } + + /// \brief Clear all BazelBlobs from container. + void Clear() noexcept { return blobs_.clear(); } + + /// \brief Number of BazelBlobs in container. + [[nodiscard]] auto Size() const noexcept -> std::size_t { + return blobs_.size(); + } + + /// \brief Is equivalent BazelBlob (with same Digest) in container. + /// \param[in] blob BazelBlob to search equivalent BazelBlob for + [[nodiscard]] auto Contains(BlobType const& blob) const noexcept -> bool { + return blobs_.contains(blob.digest); + } + + /// \brief Obtain iterable list of Blobs from container. + [[nodiscard]] auto Blobs() const noexcept { + auto converter = [](auto const& p) -> BlobType const& { + return p.second; + }; + return TransformedRange{ + blobs_.cbegin(), blobs_.cend(), std::move(converter)}; + } + + /// \brief Obtain iterable list of Digests from container. + [[nodiscard]] auto Digests() const noexcept { + auto converter = [](auto const& p) -> DigestType const& { + return p.first; + }; + return TransformedRange{ + blobs_.cbegin(), blobs_.cend(), std::move(converter)}; + } + + /// \brief Obtain iterable list of BazelBlobs related to Digests. + /// \param[in] related Related Digests + [[nodiscard]] auto RelatedBlobs( + std::vector const& related) const noexcept { + auto converter = [this](auto const& digest) -> BlobType const& { + return blobs_.at(digest); + }; + return TransformedRange{ + related.begin(), related.end(), std::move(converter)}; + }; + + private: + std::unordered_map blobs_{}; +}; + +#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_COMMON_CONTENT_BLOB_CONTAINER_HPP diff --git a/src/buildtool/execution_api/common/execution_api.hpp b/src/buildtool/execution_api/common/execution_api.hpp index 7b0ad32a..4a40c64e 100644 --- a/src/buildtool/execution_api/common/execution_api.hpp +++ b/src/buildtool/execution_api/common/execution_api.hpp @@ -26,7 +26,7 @@ #include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" // Artifact::ObjectInfo #include "src/buildtool/common/artifact_digest.hpp" -#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" +#include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" #include "src/buildtool/execution_api/common/execution_action.hpp" #include "src/buildtool/execution_engine/dag/dag.hpp" #include "src/buildtool/file_system/object_type.hpp" diff --git a/src/buildtool/execution_api/remote/bazel/bazel_action.cpp b/src/buildtool/execution_api/remote/bazel/bazel_action.cpp index 13342da0..7247b2c5 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_action.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_action.cpp @@ -16,7 +16,7 @@ #include // std::move -#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" +#include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_response.hpp" #include "src/buildtool/execution_api/utils/outputscheck.hpp" diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index 0f1fdd04..042478c4 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -27,7 +27,6 @@ #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/compatibility/compatibility.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" -#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" #include "src/buildtool/execution_api/common/common_api.hpp" 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 b2b80a48..8239107b 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp @@ -27,7 +27,7 @@ #include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/common/remote/port.hpp" -#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" +#include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp" #include "src/buildtool/execution_api/remote/bazel/bytestream_client.hpp" #include "src/buildtool/execution_api/remote/config.hpp" diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp index 251662fa..2eb7a243 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp @@ -26,7 +26,8 @@ #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/common/remote/port.hpp" #include "src/buildtool/execution_api/bazel_msg/bazel_blob.hpp" -#include "src/buildtool/execution_api/bazel_msg/bazel_blob_container.hpp" +#include "src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp" +#include "src/buildtool/execution_api/common/execution_api.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_ac_client.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_cas_client.hpp" #include "src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp" -- cgit v1.2.3