summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_engine/executor/executor.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/execution_engine/executor/executor.hpp')
-rw-r--r--src/buildtool/execution_engine/executor/executor.hpp27
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_{};