diff options
Diffstat (limited to 'src/buildtool/execution_api')
6 files changed, 40 insertions, 37 deletions
diff --git a/src/buildtool/execution_api/bazel_msg/TARGETS b/src/buildtool/execution_api/bazel_msg/TARGETS index ddb40899..f5e06ab1 100644 --- a/src/buildtool/execution_api/bazel_msg/TARGETS +++ b/src/buildtool/execution_api/bazel_msg/TARGETS @@ -25,6 +25,7 @@ , "directory_tree" , ["src/buildtool/common", "common"] , ["src/buildtool/execution_engine/dag", "dag"] + , ["src/buildtool/execution_api/common", "artifact_blob_container"] , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/logging", "log_level"] , ["src/buildtool/logging", "logging"] 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 27e07c12..532910fb 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.cpp @@ -32,11 +32,6 @@ #include "src/utils/cpp/hex_string.hpp" namespace { -struct DirectoryNodeBundle final { - bazel_re::DirectoryNode const message; - BazelBlob const bazel_blob; -}; - /// \brief Serialize protobuf message to string. template <class T> [[nodiscard]] auto SerializeMessage(T const& message) noexcept @@ -122,7 +117,7 @@ template <class T> /// instances at once [[nodiscard]] auto CreateSymlinkNodesFromDigests( std::vector<std::string> const& symlink_names, - std::vector<bazel_re::Digest> const& symlink_digests, + std::vector<ArtifactDigest> const& symlink_digests, BazelMsgFactory::LinkDigestResolveFunc const& resolve_links) -> std::vector<bazel_re::SymlinkNode> { std::vector<std::string> symlink_targets; @@ -137,6 +132,11 @@ template <class T> return symlink_nodes; } +struct DirectoryNodeBundle final { + bazel_re::DirectoryNode message; + ArtifactBlob blob; +}; + /// \brief Create bundle for protobuf message DirectoryNode from Directory. [[nodiscard]] auto CreateDirectoryNodeBundle(std::string const& dir_name, bazel_re::Directory const& dir) @@ -153,7 +153,7 @@ template <class T> return DirectoryNodeBundle{ .message = CreateDirectoryNode(dir_name, digest), - .bazel_blob = BazelBlob{ + .blob = ArtifactBlob{ std::move(digest), std::move(*content), /*is_exec=*/false}}; } @@ -239,18 +239,18 @@ template <class T> std::vector<bazel_re::FileNode> file_nodes{}; std::vector<bazel_re::DirectoryNode> dir_nodes{}; std::vector<std::string> symlink_names{}; - std::vector<bazel_re::Digest> symlink_digests{}; + std::vector<ArtifactDigest> symlink_digests{}; try { for (auto const& [name, node] : *tree) { if (std::holds_alternative<DirectoryTreePtr>(node)) { auto const& dir = std::get<DirectoryTreePtr>(node); - auto const dir_bundle = DirectoryTreeToBundle( + auto dir_bundle = DirectoryTreeToBundle( name, dir, resolve_links, process_blob, parent / name); if (not dir_bundle) { return std::nullopt; } - dir_nodes.emplace_back(dir_bundle->message); - if (not process_blob(BazelBlob{dir_bundle->bazel_blob})) { + dir_nodes.emplace_back(std::move(dir_bundle->message)); + if (not process_blob(std::move(dir_bundle->blob))) { return std::nullopt; } } @@ -295,19 +295,21 @@ auto BazelMsgFactory::CreateDirectoryDigestFromTree( DirectoryTreePtr const& tree, LinkDigestResolveFunc const& resolve_links, BlobProcessFunc const& process_blob) noexcept - -> std::optional<bazel_re::Digest> { - if (auto bundle = - DirectoryTreeToBundle("", tree, resolve_links, process_blob)) { - try { - if (not process_blob(BazelBlob{bundle->bazel_blob})) { - return std::nullopt; - } - } catch (...) { + -> std::optional<ArtifactDigest> { + auto bundle = DirectoryTreeToBundle("", tree, resolve_links, process_blob); + if (not bundle) { + return std::nullopt; + } + + auto const digest = bundle->blob.digest; + try { + if (not process_blob(std::move(bundle->blob))) { return std::nullopt; } - return bundle->bazel_blob.digest; + } catch (...) { + return std::nullopt; } - return std::nullopt; + return digest; } auto BazelMsgFactory::CreateDirectoryDigestFromLocalTree( diff --git a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp index 0e209153..564c346b 100644 --- a/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp +++ b/src/buildtool/execution_api/bazel_msg/bazel_msg_factory.hpp @@ -31,6 +31,7 @@ #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/directory_tree.hpp" +#include "src/buildtool/execution_api/common/artifact_blob_container.hpp" #include "src/buildtool/execution_engine/dag/dag.hpp" #include "src/buildtool/logging/log_level.hpp" #include "src/buildtool/logging/logger.hpp" @@ -41,10 +42,10 @@ class BazelMsgFactory { public: /// \brief Store or otherwise process a blob. Returns success flag. - using BlobProcessFunc = std::function<bool(BazelBlob&&)>; + using BlobProcessFunc = std::function<bool(ArtifactBlob&&)>; using LinkDigestResolveFunc = - std::function<void(std::vector<bazel_re::Digest> const&, - std::vector<std::string>*)>; + std::function<void(std::vector<ArtifactDigest> const&, + gsl::not_null<std::vector<std::string>*> const&)>; using FileStoreFunc = std::function< std::optional<ArtifactDigest>(std::filesystem::path const&, bool)>; using SymlinkStoreFunc = @@ -63,7 +64,7 @@ class BazelMsgFactory { DirectoryTreePtr const& tree, LinkDigestResolveFunc const& resolve_links, BlobProcessFunc const& process_blob) noexcept - -> std::optional<bazel_re::Digest>; + -> std::optional<ArtifactDigest>; /// \brief Create Directory digest from local file root. /// Recursively traverse entire root and store files and directories. diff --git a/src/buildtool/execution_api/common/common_api.cpp b/src/buildtool/execution_api/common/common_api.cpp index 74e52c19..319be597 100644 --- a/src/buildtool/execution_api/common/common_api.cpp +++ b/src/buildtool/execution_api/common/common_api.cpp @@ -87,7 +87,7 @@ auto CommonUploadBlobTree(BlobTreePtr const& blob_tree, // Create digest list from blobs for batch availability check. auto missing_blobs_info = GetMissingArtifactsInfo<BlobTreePtr>( api, blob_tree->begin(), blob_tree->end(), [](BlobTreePtr const& node) { - return ArtifactDigest{node->Blob().digest}; + return node->Blob().digest; }); if (not missing_blobs_info) { Logger::Log(LogLevel::Error, @@ -133,11 +133,10 @@ auto CommonUploadTreeCompatible( ArtifactBlobContainer blobs{}; // Store and upload blobs, taking into account the maximum transfer size. auto digest = BazelMsgFactory::CreateDirectoryDigestFromTree( - build_root, resolve_links, [&blobs, &api](BazelBlob&& blob) { + build_root, resolve_links, [&blobs, &api](ArtifactBlob&& blob) { return UpdateContainerAndUpload<ArtifactDigest>( &blobs, - std::move(ArtifactBlob{ - ArtifactDigest{blob.digest}, blob.data, blob.is_exec}), + std::move(blob), /*exception_is_fatal=*/false, [&api](ArtifactBlobContainer&& container) -> bool { return api.Upload(std::move(container), @@ -159,7 +158,7 @@ auto CommonUploadTreeCompatible( Logger::Log(LogLevel::Debug, "failed to upload blobs for build root."); return std::nullopt; } - return ArtifactDigest{*digest}; + return digest; } auto CommonUploadTreeNative(IExecutionApi const& api, diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index f1515418..6fd7456a 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -289,13 +289,12 @@ class LocalApi final : public IExecutionApi { *this, *build_root, [&cas = local_context_.storage->CAS()]( - std::vector<bazel_re::Digest> const& digests, - std::vector<std::string>* targets) { + std::vector<ArtifactDigest> const& digests, + gsl::not_null<std::vector<std::string>*> const& targets) { targets->reserve(digests.size()); for (auto const& digest : digests) { - auto p = - cas.BlobPath(static_cast<ArtifactDigest>(digest), - /*is_executable=*/false); + auto p = cas.BlobPath(digest, + /*is_executable=*/false); auto content = FileSystemManager::ReadFile(*p); targets->emplace_back(*content); } diff --git a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp index b76c3877..2f8d5d08 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_api.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_api.cpp @@ -531,8 +531,9 @@ auto BazelApi::CreateAction( return CommonUploadTreeCompatible( *this, *build_root, - [&network = network_](std::vector<bazel_re::Digest> const& digests, - std::vector<std::string>* targets) { + [&network = network_]( + std::vector<ArtifactDigest> const& digests, + gsl::not_null<std::vector<std::string>*> const& targets) { auto reader = network->CreateReader(); targets->reserve(digests.size()); for (auto blobs : reader.ReadIncrementally(digests)) { |