From 37968f38e8dc07a27941c52204692c6f3254c22a Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Mon, 20 Nov 2023 14:16:37 +0100 Subject: just serve: Implement client-side ServeContent and extend serve API --- src/buildtool/serve_api/remote/serve_api.hpp | 5 +++++ .../serve_api/remote/source_tree_client.cpp | 22 ++++++++++++++++++++++ .../serve_api/remote/source_tree_client.hpp | 6 ++++++ 3 files changed, 33 insertions(+) (limited to 'src') diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp index 48ba4098..16b998b4 100644 --- a/src/buildtool/serve_api/remote/serve_api.hpp +++ b/src/buildtool/serve_api/remote/serve_api.hpp @@ -56,6 +56,11 @@ class ServeApi final { content, archive_type, subdir, resolve_symlinks, sync_tree); } + [[nodiscard]] static auto ContentInRemoteCAS(std::string const& content) + -> bool { + return Instance().stc_->ServeContent(content); + } + [[nodiscard]] static auto ServeTargetVariables( std::string const& target_root_id, std::string const& target_file, diff --git a/src/buildtool/serve_api/remote/source_tree_client.cpp b/src/buildtool/serve_api/remote/source_tree_client.cpp index a2ff930f..e3cc0756 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.cpp +++ b/src/buildtool/serve_api/remote/source_tree_client.cpp @@ -120,3 +120,25 @@ auto SourceTreeClient::ServeArchiveTree( } return response.tree(); } + +auto SourceTreeClient::ServeContent(std::string const& content) -> bool { + justbuild::just_serve::ServeContentRequest request{}; + request.set_content(content); + + grpc::ClientContext context; + justbuild::just_serve::ServeContentResponse response; + grpc::Status status = stub_->ServeContent(&context, request, &response); + + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Debug, status); + return false; + } + if (response.status() != + ::justbuild::just_serve::ServeContentResponse::OK) { + logger_.Emit(LogLevel::Debug, + "ServeContent response returned with {}", + static_cast(response.status())); + return false; + } + return true; +} diff --git a/src/buildtool/serve_api/remote/source_tree_client.hpp b/src/buildtool/serve_api/remote/source_tree_client.hpp index 2a7f1ec2..e240a45a 100644 --- a/src/buildtool/serve_api/remote/source_tree_client.hpp +++ b/src/buildtool/serve_api/remote/source_tree_client.hpp @@ -54,6 +54,12 @@ class SourceTreeClient { std::optional const& resolve_symlinks, bool sync_tree) -> std::optional; + /// \brief Make a given content blob available in remote CAS, if known by + /// serve remote. + /// \param[in] content Hash of the archive content to look up. + /// \returns Flag to state whether content is in remote CAS. + [[nodiscard]] auto ServeContent(std::string const& content) -> bool; + private: std::unique_ptr stub_; Logger logger_{"RemoteSourceTreeClient"}; -- cgit v1.2.3