From d83c997ad5a866f4fbb38d4a81e7edf70a491db2 Mon Sep 17 00:00:00 2001 From: Sascha Roloff Date: Fri, 23 Feb 2024 09:32:54 +0100 Subject: 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. --- .../execution_api/execution_service/cas_utils.hpp | 45 ++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/buildtool/execution_api/execution_service/cas_utils.hpp (limited to 'src/buildtool/execution_api/execution_service/cas_utils.hpp') 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 +#include +#include +#include + +#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; + + [[nodiscard]] static auto SplitBlob(bazel_re::Digest const& blob_digest, + Storage const& storage) noexcept + -> std::variant, grpc::Status>; + + [[nodiscard]] static auto SpliceBlob( + bazel_re::Digest const& blob_digest, + std::vector const& chunk_digests, + Storage const& storage) noexcept + -> std::variant; +}; + +#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_EXECUTION_SERVICE_CAS_UTILS_HPP -- cgit v1.2.3