diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-08 11:13:42 +0100 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-01-09 11:35:45 +0100 |
commit | 3987f571650c591ec895cb82745fac2c895c66d2 (patch) | |
tree | 4adf62897fd15811399847babc2a71d8f2e66132 /src/buildtool/execution_engine/executor/executor.hpp | |
parent | a5b0964d71fc943347d1e961b68929710a0f632d (diff) | |
download | justbuild-3987f571650c591ec895cb82745fac2c895c66d2.tar.gz |
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.
Diffstat (limited to 'src/buildtool/execution_engine/executor/executor.hpp')
-rw-r--r-- | src/buildtool/execution_engine/executor/executor.hpp | 27 |
1 files changed, 23 insertions, 4 deletions
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 <map> #include <optional> #include <type_traits> +#include <utility> #include <vector> #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<DependencyGraph::ActionNode const*> const& action, gsl::not_null<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, std::chrono::milliseconds const& timeout, IExecutionAction::CacheFlag cache_flag) -> std::optional<IExecutionResponse::Ptr> { @@ -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>{Artifact::ObjectInfo{ @@ -616,10 +621,11 @@ class ExecutorImpl { private: [[nodiscard]] static inline auto GetAlternativeEndpoint( - const std::map<std::string, std::string>& properties) + const std::map<std::string, std::string>& properties, + const std::vector<std::pair<std::map<std::string, std::string>, + ServerAddress>>& dispatch_list) -> std::unique_ptr<BazelApi> { - 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<std::string, std::string> properties, + std::vector<std::pair<std::map<std::string, std::string>, + 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<IExecutionApi*> local_api_; gsl::not_null<IExecutionApi*> remote_api_; std::map<std::string, std::string> properties_; + std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> + dispatch_list_; std::chrono::milliseconds timeout_; }; @@ -720,12 +732,15 @@ class Rebuilder { IExecutionApi* remote_api, IExecutionApi* api_cached, std::map<std::string, std::string> properties, + std::vector<std::pair<std::map<std::string, std::string>, + 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<IExecutionApi*> remote_api_; gsl::not_null<IExecutionApi*> api_cached_; std::map<std::string, std::string> properties_; + std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>> + dispatch_list_; std::chrono::milliseconds timeout_; mutable std::mutex m_; mutable std::vector<std::string> cache_misses_{}; |