diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-07-15 14:40:15 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-07-16 17:51:12 +0200 |
commit | 6c95b7c6e20467270da26cd5d10111bb9307c065 (patch) | |
tree | 7646515782153e60427ee8a07532b2df07e7e012 | |
parent | 978de9de55d9592c258052dd52dc25c788a89d78 (diff) | |
download | justbuild-6c95b7c6e20467270da26cd5d10111bb9307c065.tar.gz |
Add useful aliases for platform properties and dispatch endpoint
-rw-r--r-- | src/buildtool/common/remote/remote_common.hpp | 16 | ||||
-rw-r--r-- | src/buildtool/execution_api/remote/config.hpp | 11 | ||||
-rw-r--r-- | src/buildtool/execution_engine/executor/executor.hpp | 36 | ||||
-rw-r--r-- | src/buildtool/graph_traverser/graph_traverser.hpp | 10 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/target.cpp | 4 | ||||
-rw-r--r-- | src/buildtool/serve_api/serve_service/target.hpp | 6 |
6 files changed, 36 insertions, 47 deletions
diff --git a/src/buildtool/common/remote/remote_common.hpp b/src/buildtool/common/remote/remote_common.hpp index 0f995dd5..92adda0b 100644 --- a/src/buildtool/common/remote/remote_common.hpp +++ b/src/buildtool/common/remote/remote_common.hpp @@ -37,6 +37,10 @@ struct ServerAddress { } }; +// Useful additional types +using ExecutionProperties = std::map<std::string, std::string>; +using DispatchEndpoint = std::pair<ExecutionProperties, ServerAddress>; + [[nodiscard]] static auto ParseAddress(std::string const& address) noexcept -> std::optional<ServerAddress> { std::istringstream iss(address); @@ -63,10 +67,9 @@ struct ServerAddress { return std::make_pair(key, val); } -[[nodiscard]] static auto -ParseDispatch(std::string const& dispatch_info) noexcept -> expected< - std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>, - std::string> { +[[nodiscard]] static auto ParseDispatch( + std::string const& dispatch_info) noexcept + -> expected<std::vector<DispatchEndpoint>, std::string> { nlohmann::json dispatch; try { dispatch = nlohmann::json::parse(dispatch_info); @@ -74,8 +77,7 @@ ParseDispatch(std::string const& dispatch_info) noexcept -> expected< return unexpected{fmt::format( "Failed to parse endpoint configuration: {}", e.what())}; } - std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> - parsed{}; + std::vector<DispatchEndpoint> parsed{}; try { if (not dispatch.is_array()) { return unexpected{ @@ -96,7 +98,7 @@ ParseDispatch(std::string const& dispatch_info) noexcept -> expected< "given as an object, but found {}", entry[0].dump())}; } - std::map<std::string, std::string> props{}; + ExecutionProperties props{}; for (auto const& [k, v] : entry[0].items()) { if (not v.is_string()) { return unexpected{ diff --git a/src/buildtool/execution_api/remote/config.hpp b/src/buildtool/execution_api/remote/config.hpp index 7167a3ad..ea7a7093 100644 --- a/src/buildtool/execution_api/remote/config.hpp +++ b/src/buildtool/execution_api/remote/config.hpp @@ -79,13 +79,13 @@ class RemoteExecutionConfig { } // Instance dispatch list - [[nodiscard]] static auto DispatchList() noexcept -> std::vector< - std::pair<std::map<std::string, std::string>, ServerAddress>> { + [[nodiscard]] static auto DispatchList() noexcept + -> std::vector<DispatchEndpoint> { return Instance().dispatch_; } [[nodiscard]] static auto PlatformProperties() noexcept - -> std::map<std::string, std::string> { + -> ExecutionProperties { return Instance().platform_properties_; } @@ -134,14 +134,13 @@ class RemoteExecutionConfig { std::optional<ServerAddress> remote_address_{}; // Server dispatch data - std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> - dispatch_{}; + std::vector<DispatchEndpoint> dispatch_{}; // Server address of cache endpoint for rebuild. std::optional<ServerAddress> cache_address_{}; // Platform properties for execution. - std::map<std::string, std::string> platform_properties_{}; + ExecutionProperties platform_properties_{}; }; #endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_REMOTE_CONFIG_HPP diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index 8b94a016..e04a2948 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -58,9 +58,8 @@ class ExecutorImpl { Logger const& logger, gsl::not_null<DependencyGraph::ActionNode const*> const& action, IExecutionApi const& api, - std::map<std::string, std::string> const& properties, - std::vector<std::pair<std::map<std::string, std::string>, - ServerAddress>> const& dispatch_list, + ExecutionProperties const& properties, + std::vector<DispatchEndpoint> const& dispatch_list, gsl::not_null<Auth const*> const& auth, std::chrono::milliseconds const& timeout, IExecutionAction::CacheFlag cache_flag, @@ -654,9 +653,9 @@ class ExecutorImpl { } [[nodiscard]] static inline auto MergeProperties( - const std::map<std::string, std::string>& base, - const std::map<std::string, std::string>& overlay) { - std::map<std::string, std::string> result = base; + const ExecutionProperties& base, + const ExecutionProperties& overlay) { + ExecutionProperties result = base; for (auto const& [k, v] : overlay) { result[k] = v; } @@ -665,9 +664,8 @@ class ExecutorImpl { private: [[nodiscard]] static inline auto GetAlternativeEndpoint( - const std::map<std::string, std::string>& properties, - const std::vector<std::pair<std::map<std::string, std::string>, - ServerAddress>>& dispatch_list, + const ExecutionProperties& properties, + const std::vector<DispatchEndpoint>& dispatch_list, const gsl::not_null<Auth const*>& auth) -> std::unique_ptr<BazelApi> { for (auto const& [pred, endpoint] : dispatch_list) { bool match = true; @@ -705,9 +703,8 @@ class Executor { gsl::not_null<const RepositoryConfig*> const& repo_config, gsl::not_null<IExecutionApi const*> const& local_api, gsl::not_null<IExecutionApi const*> const& remote_api, - std::map<std::string, std::string> properties, - std::vector<std::pair<std::map<std::string, std::string>, - ServerAddress>> dispatch_list, + ExecutionProperties properties, + std::vector<DispatchEndpoint> dispatch_list, gsl::not_null<Auth const*> const& auth, gsl::not_null<Statistics*> const& stats, gsl::not_null<Progress*> const& progress, @@ -795,9 +792,8 @@ class Executor { gsl::not_null<const RepositoryConfig*> repo_config_; IExecutionApi const& local_api_; IExecutionApi const& remote_api_; - std::map<std::string, std::string> properties_; - std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> - dispatch_list_; + ExecutionProperties properties_; + std::vector<DispatchEndpoint> dispatch_list_; Auth const& auth_; gsl::not_null<Statistics*> stats_; gsl::not_null<Progress*> progress_; @@ -821,9 +817,8 @@ class Rebuilder { gsl::not_null<IExecutionApi const*> const& local_api, gsl::not_null<IExecutionApi const*> const& remote_api, gsl::not_null<IExecutionApi const*> const& api_cached, - std::map<std::string, std::string> properties, - std::vector<std::pair<std::map<std::string, std::string>, - ServerAddress>> dispatch_list, + ExecutionProperties properties, + std::vector<DispatchEndpoint> dispatch_list, gsl::not_null<Auth const*> const& auth, gsl::not_null<Statistics*> const& stats, gsl::not_null<Progress*> const& progress, @@ -913,9 +908,8 @@ class Rebuilder { IExecutionApi const& local_api_; IExecutionApi const& remote_api_; IExecutionApi const& api_cached_; - std::map<std::string, std::string> properties_; - std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> - dispatch_list_; + ExecutionProperties properties_; + std::vector<DispatchEndpoint> dispatch_list_; Auth const& auth_; gsl::not_null<Statistics*> stats_; gsl::not_null<Progress*> progress_; diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp index 5cc59d9b..3a4f3d96 100644 --- a/src/buildtool/graph_traverser/graph_traverser.hpp +++ b/src/buildtool/graph_traverser/graph_traverser.hpp @@ -76,9 +76,8 @@ class GraphTraverser { explicit GraphTraverser( CommandLineArguments clargs, gsl::not_null<const RepositoryConfig*> const& repo_config, - std::map<std::string, std::string> platform_properties, - std::vector<std::pair<std::map<std::string, std::string>, - ServerAddress>> dispatch_list, + ExecutionProperties platform_properties, + std::vector<DispatchEndpoint> dispatch_list, gsl::not_null<Statistics*> const& stats, gsl::not_null<Progress*> const& progress, gsl::not_null<ApiBundle const*> const& apis, @@ -227,9 +226,8 @@ class GraphTraverser { private: CommandLineArguments const clargs_; gsl::not_null<const RepositoryConfig*> repo_config_; - std::map<std::string, std::string> platform_properties_; - std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> - dispatch_list_; + ExecutionProperties platform_properties_; + std::vector<DispatchEndpoint> dispatch_list_; gsl::not_null<Statistics*> stats_; gsl::not_null<Progress*> progress_; ApiBundle const& apis_; diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index 3ee2a3b1..6cae3d8b 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -46,7 +46,7 @@ auto TargetService::GetDispatchList( ArtifactDigest const& dispatch_digest) noexcept - -> expected<dispatch_t, ::grpc::Status> { + -> expected<std::vector<DispatchEndpoint>, ::grpc::Status> { // get blob from remote cas auto const& dispatch_info = Artifact::ObjectInfo{.digest = dispatch_digest, .type = ObjectType::File}; @@ -142,7 +142,7 @@ auto TargetService::ServeTarget( // Important: we will need to pass these platform properties also to the // executor (via the graph_traverser) in order for the build to be properly // dispatched to the correct remote-execution endpoint. - auto platform_properties = std::map<std::string, std::string>{}; + auto platform_properties = ExecutionProperties{}; for (auto const& p : request->execution_properties()) { platform_properties[p.name()] = p.value(); } diff --git a/src/buildtool/serve_api/serve_service/target.hpp b/src/buildtool/serve_api/serve_service/target.hpp index 1ce7fad2..aaf9bb39 100644 --- a/src/buildtool/serve_api/serve_service/target.hpp +++ b/src/buildtool/serve_api/serve_service/target.hpp @@ -139,17 +139,13 @@ class TargetService final : public justbuild::just_serve::Target::Service { ServeApi const* const serve_ = nullptr; std::shared_ptr<Logger> logger_{std::make_shared<Logger>("target-service")}; - // type of dispatch list; reduces verbosity - using dispatch_t = std::vector< - std::pair<std::map<std::string, std::string>, ServerAddress>>; - /// \brief Get from remote and parse the endpoint configuration. The method /// also ensures the content has the expected format. /// \returns The dispatch list stored as JSON object on success or an /// unexpected error as grpc::Status. [[nodiscard]] auto GetDispatchList( ArtifactDigest const& dispatch_digest) noexcept - -> expected<dispatch_t, ::grpc::Status>; + -> expected<std::vector<DispatchEndpoint>, ::grpc::Status>; /// \brief Handles the processing of the log after a failed analysis or /// build. Will populate the response as needed and set the status to be |