From 5e9234326754cc83140ecaae798c31fe3ec5c165 Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Mon, 5 May 2025 18:23:51 +0200 Subject: BazelNetwork: Read supported remote RBE version --- src/buildtool/execution_api/remote/TARGETS | 1 + .../remote/bazel/bazel_capabilities_client.cpp | 19 ++++++++++++++++++- .../remote/bazel/bazel_capabilities_client.hpp | 18 ++++++++++++++++++ .../execution_api/remote/bazel/bazel_network.hpp | 4 ++++ 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/buildtool/execution_api/remote/TARGETS b/src/buildtool/execution_api/remote/TARGETS index 7fccc2c6..fc46db70 100644 --- a/src/buildtool/execution_api/remote/TARGETS +++ b/src/buildtool/execution_api/remote/TARGETS @@ -42,6 +42,7 @@ ] , "proto": [ ["@", "bazel_remote_apis", "", "remote_execution_proto"] + , ["@", "bazel_remote_apis", "", "semver_proto"] , ["@", "googleapis", "", "google_bytestream_proto"] , ["@", "googleapis", "", "google_longrunning_operations_proto"] , ["@", "googleapis", "", "google_rpc_status_proto"] diff --git a/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp b/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp index 20a1dce1..00d113d8 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.cpp @@ -21,6 +21,7 @@ #include +#include "build/bazel/semver/semver.pb.h" #include "fmt/core.h" #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/common/remote/client_common.hpp" @@ -28,6 +29,14 @@ #include "src/buildtool/logging/log_level.hpp" namespace { + +[[nodiscard]] auto ParseSemVer(build::bazel::semver::SemVer const& + version) noexcept -> Capabilities::Version { + return Capabilities::Version{.major = version.major(), + .minor = version.minor(), + .patch = version.patch()}; +} + [[nodiscard]] auto Parse(std::optional response) noexcept -> Capabilities { if (not response.has_value()) { @@ -50,8 +59,16 @@ namespace { } return Capabilities{ .MaxBatchTransferSize = max_batch, - }; + .low_api_version = response->has_deprecated_api_version() + ? ParseSemVer(response->deprecated_api_version()) + : (response->has_low_api_version() // NOLINT + ? ParseSemVer(response->low_api_version()) + : Capabilities::kMinVersion), + .high_api_version = response->has_high_api_version() + ? ParseSemVer(response->high_api_version()) + : Capabilities::kMaxVersion}; } + } // namespace BazelCapabilitiesClient::BazelCapabilitiesClient( diff --git a/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.hpp b/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.hpp index b33bb2de..ddff0ef0 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_capabilities_client.hpp @@ -16,7 +16,9 @@ #define INCLUDED_SRC_BUILDTOOL_EXECUTION_API_REMOTE_BAZEL_BAZEL_CAPABILITIES_CLIENT_HPP #include +#include #include +#include #include #include #include @@ -34,8 +36,24 @@ namespace bazel_re = build::bazel::remote::execution::v2; struct Capabilities final { using Ptr = gsl::not_null>; + struct Version { + std::int32_t major{}; + std::int32_t minor{}; + std::int32_t patch{}; + + [[nodiscard]] auto operator<=>(Version const& other) const noexcept = + default; + }; + + static constexpr Version kMinVersion{.major = 0, .minor = 0, .patch = 0}; + static constexpr Version kMaxVersion{ + .major = std::numeric_limits::max(), + .minor = std::numeric_limits::max(), + .patch = std::numeric_limits::max()}; std::size_t const MaxBatchTransferSize = MessageLimits::kMaxGrpcLength; + Version const low_api_version = kMinVersion; + Version const high_api_version = kMaxVersion; }; class BazelCapabilitiesClient final { diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp index 4dbf1467..403e0f05 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.hpp @@ -97,6 +97,10 @@ class BazelNetwork { std::vector const& output_files) const noexcept -> std::optional; + [[nodiscard]] auto GetCapabilities() const noexcept -> Capabilities::Ptr { + return capabilities_->GetCapabilities(instance_name_); + } + private: std::string const instance_name_; std::unique_ptr capabilities_; -- cgit v1.2.3