From 3987f571650c591ec895cb82745fac2c895c66d2 Mon Sep 17 00:00:00 2001 From: Paul Cristian Sarbu Date: Mon, 8 Jan 2024 11:13:42 +0100 Subject: Refactor GraphTraverser to take in platform properties and dispatch list In order for the serve endpoint to correctly dispatch a build to the correct remote-execution endpoint, the platform properties and dispatch list for a build need to be passed explicitly to the executor (via the graph traverser instance) instead of always being taken from the RemoteExecutionConfig struct. This commit implements these changes, including updating existing tests accordingly. --- .../execution_engine/executor/executor.hpp | 27 ++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'src/buildtool/execution_engine/executor/executor.hpp') diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp index 29b16a1d..4e33060c 100644 --- a/src/buildtool/execution_engine/executor/executor.hpp +++ b/src/buildtool/execution_engine/executor/executor.hpp @@ -22,9 +22,11 @@ #include #include #include +#include #include #include "gsl/gsl" +#include "src/buildtool/common/remote/remote_common.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" #include "src/buildtool/common/tree.hpp" @@ -49,6 +51,8 @@ class ExecutorImpl { gsl::not_null const& action, gsl::not_null const& api, std::map const& properties, + std::vector, + ServerAddress>> const& dispatch_list, std::chrono::milliseconds const& timeout, IExecutionAction::CacheFlag cache_flag) -> std::optional { @@ -94,7 +98,8 @@ class ExecutorImpl { Statistics::Instance().IncrementActionsQueuedCounter(); } - auto alternative_api = GetAlternativeEndpoint(properties); + auto alternative_api = + GetAlternativeEndpoint(properties, dispatch_list); if (alternative_api) { if (not api->RetrieveToCas( std::vector{Artifact::ObjectInfo{ @@ -616,10 +621,11 @@ class ExecutorImpl { private: [[nodiscard]] static inline auto GetAlternativeEndpoint( - const std::map& properties) + const std::map& properties, + const std::vector, + ServerAddress>>& dispatch_list) -> std::unique_ptr { - for (auto const& [pred, endpoint] : - RemoteExecutionConfig::DispatchList()) { + for (auto const& [pred, endpoint] : dispatch_list) { bool match = true; for (auto const& [k, v] : pred) { auto v_it = properties.find(k); @@ -655,11 +661,14 @@ class Executor { IExecutionApi* local_api, IExecutionApi* remote_api, std::map properties, + std::vector, + ServerAddress>> dispatch_list, std::chrono::milliseconds timeout = IExecutionAction::kDefaultTimeout) : repo_config_{repo_config}, local_api_{local_api}, remote_api_{remote_api}, properties_{std::move(properties)}, + dispatch_list_{std::move(dispatch_list)}, timeout_{timeout} {} /// \brief Run an action in a blocking manner @@ -676,6 +685,7 @@ class Executor { action, remote_api_, Impl::MergeProperties(properties_, action->ExecutionProperties()), + dispatch_list_, Impl::ScaleTime(timeout_, action->TimeoutScale()), action->NoCache() ? CF::DoNotCacheOutput : CF::CacheOutput); @@ -700,6 +710,8 @@ class Executor { gsl::not_null local_api_; gsl::not_null remote_api_; std::map properties_; + std::vector, ServerAddress>> + dispatch_list_; std::chrono::milliseconds timeout_; }; @@ -720,12 +732,15 @@ class Rebuilder { IExecutionApi* remote_api, IExecutionApi* api_cached, std::map properties, + std::vector, + ServerAddress>> dispatch_list, std::chrono::milliseconds timeout = IExecutionAction::kDefaultTimeout) : repo_config_{repo_config}, local_api_{local_api}, remote_api_{remote_api}, api_cached_{api_cached}, properties_{std::move(properties)}, + dispatch_list_{std::move(dispatch_list)}, timeout_{timeout} {} [[nodiscard]] auto Process( @@ -738,6 +753,7 @@ class Rebuilder { action, remote_api_, Impl::MergeProperties(properties_, action->ExecutionProperties()), + dispatch_list_, Impl::ScaleTime(timeout_, action->TimeoutScale()), CF::PretendCached); @@ -751,6 +767,7 @@ class Rebuilder { action, api_cached_, Impl::MergeProperties(properties_, action->ExecutionProperties()), + dispatch_list_, Impl::ScaleTime(timeout_, action->TimeoutScale()), CF::FromCacheOnly); @@ -791,6 +808,8 @@ class Rebuilder { gsl::not_null remote_api_; gsl::not_null api_cached_; std::map properties_; + std::vector, ServerAddress>> + dispatch_list_; std::chrono::milliseconds timeout_; mutable std::mutex m_; mutable std::vector cache_misses_{}; -- cgit v1.2.3