diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2023-10-10 17:26:40 +0200 |
---|---|---|
committer | Alberto Sartori <alberto.sartori@huawei.com> | 2023-11-15 20:19:18 +0100 |
commit | 366111c5c7b407fe0e944ee71de1c51137147805 (patch) | |
tree | 92733338a6bc3969dd5fb1e930aa4ec5b9b43d54 /src/buildtool/serve_api/remote/configuration_client.cpp | |
parent | 9cc638844836b67ba09504985dd7ad85846046ab (diff) | |
download | justbuild-366111c5c7b407fe0e944ee71de1c51137147805.tar.gz |
just-serve: Extend client and API for services Target and Configuration
Co-authored-by: Alberto Sartori <alberto.sartori@huawei.com>
Diffstat (limited to 'src/buildtool/serve_api/remote/configuration_client.cpp')
-rw-r--r-- | src/buildtool/serve_api/remote/configuration_client.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/src/buildtool/serve_api/remote/configuration_client.cpp b/src/buildtool/serve_api/remote/configuration_client.cpp new file mode 100644 index 00000000..25c38d79 --- /dev/null +++ b/src/buildtool/serve_api/remote/configuration_client.cpp @@ -0,0 +1,52 @@ +// Copyright 2023 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. + +#include "src/buildtool/serve_api/remote/configuration_client.hpp" + +#include <nlohmann/json.hpp> + +#include "src/buildtool/execution_api/remote/config.hpp" + +auto ConfigurationClient::CheckServeRemoteExecution() -> bool { + auto client_remote_address = RemoteExecutionConfig::RemoteAddress(); + if (!client_remote_address) { + logger_.Emit(LogLevel::Error, + "In order to use just-serve, also the " + "--remote-execution-address option must be given."); + return false; + } + + grpc::ClientContext context; + justbuild::just_serve::RemoteExecutionEndpointRequest request{}; + justbuild::just_serve::RemoteExecutionEndpointResponse response{}; + grpc::Status status = + stub_->RemoteExecutionEndpoint(&context, request, &response); + + if (not status.ok()) { + LogStatus(&logger_, LogLevel::Error, status); + return false; + } + auto serve_remote_endpoint = nlohmann::json::parse(response.address()); + if (serve_remote_endpoint != client_remote_address->ToJson()) { + Logger::Log(LogLevel::Error, + "Different execution endpoint detected.\nIn order to " + "correctly use just serve, its remote execution endpoint " + "must be the same used by the client.\nserve remote " + "endpoint: {}\nclient remote endpoint: {}", + serve_remote_endpoint.dump(), + client_remote_address->ToJson().dump()); + return false; + } + return true; +} |