From 9dfa79780768c43292673b7d60c69aec5bfdd12c Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Thu, 26 Sep 2024 18:28:30 +0200 Subject: Add utility methods for digest mappings These allow to read and write file associations between known digests in different CAS instances. --- src/buildtool/execution_api/serve/utils.hpp | 64 +++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/buildtool/execution_api/serve/utils.hpp (limited to 'src/buildtool/execution_api/serve/utils.hpp') diff --git a/src/buildtool/execution_api/serve/utils.hpp b/src/buildtool/execution_api/serve/utils.hpp new file mode 100644 index 00000000..3b588cf3 --- /dev/null +++ b/src/buildtool/execution_api/serve/utils.hpp @@ -0,0 +1,64 @@ +// 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_SERVE_UTILS_HPP +#define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_SERVE_UTILS_HPP + +#include +#include + +#include "src/buildtool/common/artifact.hpp" +#include "src/buildtool/common/artifact_digest.hpp" +#include "src/buildtool/file_system/object_type.hpp" +#include "src/buildtool/storage/config.hpp" +#include "src/utils/cpp/expected.hpp" + +namespace MRApiUtils { + +/// \brief Get a corresponding known object from a different local CAS, as +/// stored in a mapping file, if exists. +/// \param digest Source digest. +/// \param source_config Storage config corresponding to source digest. +/// \param target_config Storage config corresponding to target digest. +/// \param from_git Specify if source digest comes from a Git location instead +/// of CAS. +/// \returns The target artifact info on successfully reading an existing +/// mapping file, nullopt if no mapping file exists, or the error message on +/// failure. +[[nodiscard]] auto ReadRehashedDigest(ArtifactDigest const& digest, + StorageConfig const& source_config, + StorageConfig const& target_config, + bool from_git = false) noexcept + -> expected, std::string>; + +/// \brief Write the mapping file linking two digests hashing the same content. +/// \param source_digest Source digest. +/// \param target_digest Target digest. +/// \param obj_type Object type of the content represented by the two digests. +/// \param source_config Storage config corresponding to source digest. +/// \param target_config Storage config corresponding to target digest. +/// \param from_git Specify if source digest comes from a Git location instead +/// of CAS. +/// \returns nullopt on success, error message on failure. +[[nodiscard]] auto StoreRehashedDigest(ArtifactDigest const& source_digest, + ArtifactDigest const& target_digest, + ObjectType obj_type, + StorageConfig const& source_config, + StorageConfig const& target_config, + bool from_git = false) noexcept + -> std::optional; + +} // namespace MRApiUtils + +#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_SERVE_UTILS_HPP -- cgit v1.2.3