diff options
author | Sascha Roloff <sascha.roloff@huawei.com> | 2024-02-23 09:32:54 +0100 |
---|---|---|
committer | Sascha Roloff <sascha.roloff@huawei.com> | 2024-02-26 17:16:21 +0100 |
commit | d83c997ad5a866f4fbb38d4a81e7edf70a491db2 (patch) | |
tree | 7331b4d58d2c56adecb6e9879862cf354129d6af /src/buildtool/execution_api/execution_service/cas_utils.hpp | |
parent | 4ae3f068372041f949538fb273113a4a1c665a0f (diff) | |
download | justbuild-d83c997ad5a866f4fbb38d4a81e7edf70a491db2.tar.gz |
Refactor split and splice implementations.
Currently, the implementations of the split and splice operation are both
hidden behind the Bazel API implementation. This was sufficient to implement
splitting at the server and splicing at the client. In order to support the
other direction of splitting at the client and splicing at the server while
reusing their implementations, the code needs to be refactored. First, the
functionality of split and splice are explicitly exposed at the general
execution API interface and implemented in the sub APIs. Second, the
implementations of split and splice are factored into a separate utils class.
Diffstat (limited to 'src/buildtool/execution_api/execution_service/cas_utils.hpp')
-rw-r--r-- | src/buildtool/execution_api/execution_service/cas_utils.hpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/buildtool/execution_api/execution_service/cas_utils.hpp b/src/buildtool/execution_api/execution_service/cas_utils.hpp new file mode 100644 index 00000000..b22260b8 --- /dev/null +++ b/src/buildtool/execution_api/execution_service/cas_utils.hpp @@ -0,0 +1,45 @@ +// 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_EXECUTION_SERVICE_CAS_UTILS_HPP +#define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_EXECUTION_SERVICE_CAS_UTILS_HPP + +#include <optional> +#include <string> +#include <variant> +#include <vector> + +#include "grpcpp/support/status.h" +#include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/storage/storage.hpp" + +class CASUtils { + public: + [[nodiscard]] static auto EnsureTreeInvariant( + std::string const& data, + std::string const& hash, + Storage const& storage) noexcept -> std::optional<std::string>; + + [[nodiscard]] static auto SplitBlob(bazel_re::Digest const& blob_digest, + Storage const& storage) noexcept + -> std::variant<std::vector<bazel_re::Digest>, grpc::Status>; + + [[nodiscard]] static auto SpliceBlob( + bazel_re::Digest const& blob_digest, + std::vector<bazel_re::Digest> const& chunk_digests, + Storage const& storage) noexcept + -> std::variant<bazel_re::Digest, grpc::Status>; +}; + +#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_EXECUTION_SERVICE_CAS_UTILS_HPP |