diff options
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_{}; |