summaryrefslogtreecommitdiff
path: root/src/buildtool/execution_engine/executor/executor.hpp
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-01-08 11:13:42 +0100
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-01-09 11:35:45 +0100
commit3987f571650c591ec895cb82745fac2c895c66d2 (patch)
tree4adf62897fd15811399847babc2a71d8f2e66132 /src/buildtool/execution_engine/executor/executor.hpp
parenta5b0964d71fc943347d1e961b68929710a0f632d (diff)
downloadjustbuild-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.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_{};