summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-07-15 14:40:15 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-07-16 17:51:12 +0200
commit6c95b7c6e20467270da26cd5d10111bb9307c065 (patch)
tree7646515782153e60427ee8a07532b2df07e7e012
parent978de9de55d9592c258052dd52dc25c788a89d78 (diff)
downloadjustbuild-6c95b7c6e20467270da26cd5d10111bb9307c065.tar.gz
Add useful aliases for platform properties and dispatch endpoint
-rw-r--r--src/buildtool/common/remote/remote_common.hpp16
-rw-r--r--src/buildtool/execution_api/remote/config.hpp11
-rw-r--r--src/buildtool/execution_engine/executor/executor.hpp36
-rw-r--r--src/buildtool/graph_traverser/graph_traverser.hpp10
-rw-r--r--src/buildtool/serve_api/serve_service/target.cpp4
-rw-r--r--src/buildtool/serve_api/serve_service/target.hpp6
6 files changed, 36 insertions, 47 deletions
diff --git a/src/buildtool/common/remote/remote_common.hpp b/src/buildtool/common/remote/remote_common.hpp
index 0f995dd5..92adda0b 100644
--- a/src/buildtool/common/remote/remote_common.hpp
+++ b/src/buildtool/common/remote/remote_common.hpp
@@ -37,6 +37,10 @@ struct ServerAddress {
}
};
+// Useful additional types
+using ExecutionProperties = std::map<std::string, std::string>;
+using DispatchEndpoint = std::pair<ExecutionProperties, ServerAddress>;
+
[[nodiscard]] static auto ParseAddress(std::string const& address) noexcept
-> std::optional<ServerAddress> {
std::istringstream iss(address);
@@ -63,10 +67,9 @@ struct ServerAddress {
return std::make_pair(key, val);
}
-[[nodiscard]] static auto
-ParseDispatch(std::string const& dispatch_info) noexcept -> expected<
- std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>,
- std::string> {
+[[nodiscard]] static auto ParseDispatch(
+ std::string const& dispatch_info) noexcept
+ -> expected<std::vector<DispatchEndpoint>, std::string> {
nlohmann::json dispatch;
try {
dispatch = nlohmann::json::parse(dispatch_info);
@@ -74,8 +77,7 @@ ParseDispatch(std::string const& dispatch_info) noexcept -> expected<
return unexpected{fmt::format(
"Failed to parse endpoint configuration: {}", e.what())};
}
- std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>
- parsed{};
+ std::vector<DispatchEndpoint> parsed{};
try {
if (not dispatch.is_array()) {
return unexpected{
@@ -96,7 +98,7 @@ ParseDispatch(std::string const& dispatch_info) noexcept -> expected<
"given as an object, but found {}",
entry[0].dump())};
}
- std::map<std::string, std::string> props{};
+ ExecutionProperties props{};
for (auto const& [k, v] : entry[0].items()) {
if (not v.is_string()) {
return unexpected{
diff --git a/src/buildtool/execution_api/remote/config.hpp b/src/buildtool/execution_api/remote/config.hpp
index 7167a3ad..ea7a7093 100644
--- a/src/buildtool/execution_api/remote/config.hpp
+++ b/src/buildtool/execution_api/remote/config.hpp
@@ -79,13 +79,13 @@ class RemoteExecutionConfig {
}
// Instance dispatch list
- [[nodiscard]] static auto DispatchList() noexcept -> std::vector<
- std::pair<std::map<std::string, std::string>, ServerAddress>> {
+ [[nodiscard]] static auto DispatchList() noexcept
+ -> std::vector<DispatchEndpoint> {
return Instance().dispatch_;
}
[[nodiscard]] static auto PlatformProperties() noexcept
- -> std::map<std::string, std::string> {
+ -> ExecutionProperties {
return Instance().platform_properties_;
}
@@ -134,14 +134,13 @@ class RemoteExecutionConfig {
std::optional<ServerAddress> remote_address_{};
// Server dispatch data
- std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>
- dispatch_{};
+ std::vector<DispatchEndpoint> dispatch_{};
// Server address of cache endpoint for rebuild.
std::optional<ServerAddress> cache_address_{};
// Platform properties for execution.
- std::map<std::string, std::string> platform_properties_{};
+ ExecutionProperties platform_properties_{};
};
#endif // INCLUDED_SRC_BUILDTOOL_EXECUTION_API_REMOTE_CONFIG_HPP
diff --git a/src/buildtool/execution_engine/executor/executor.hpp b/src/buildtool/execution_engine/executor/executor.hpp
index 8b94a016..e04a2948 100644
--- a/src/buildtool/execution_engine/executor/executor.hpp
+++ b/src/buildtool/execution_engine/executor/executor.hpp
@@ -58,9 +58,8 @@ class ExecutorImpl {
Logger const& logger,
gsl::not_null<DependencyGraph::ActionNode const*> const& action,
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,
+ ExecutionProperties const& properties,
+ std::vector<DispatchEndpoint> const& dispatch_list,
gsl::not_null<Auth const*> const& auth,
std::chrono::milliseconds const& timeout,
IExecutionAction::CacheFlag cache_flag,
@@ -654,9 +653,9 @@ class ExecutorImpl {
}
[[nodiscard]] static inline auto MergeProperties(
- const std::map<std::string, std::string>& base,
- const std::map<std::string, std::string>& overlay) {
- std::map<std::string, std::string> result = base;
+ const ExecutionProperties& base,
+ const ExecutionProperties& overlay) {
+ ExecutionProperties result = base;
for (auto const& [k, v] : overlay) {
result[k] = v;
}
@@ -665,9 +664,8 @@ class ExecutorImpl {
private:
[[nodiscard]] static inline auto GetAlternativeEndpoint(
- const std::map<std::string, std::string>& properties,
- const std::vector<std::pair<std::map<std::string, std::string>,
- ServerAddress>>& dispatch_list,
+ const ExecutionProperties& properties,
+ const std::vector<DispatchEndpoint>& dispatch_list,
const gsl::not_null<Auth const*>& auth) -> std::unique_ptr<BazelApi> {
for (auto const& [pred, endpoint] : dispatch_list) {
bool match = true;
@@ -705,9 +703,8 @@ class Executor {
gsl::not_null<const RepositoryConfig*> const& repo_config,
gsl::not_null<IExecutionApi const*> const& local_api,
gsl::not_null<IExecutionApi const*> const& remote_api,
- std::map<std::string, std::string> properties,
- std::vector<std::pair<std::map<std::string, std::string>,
- ServerAddress>> dispatch_list,
+ ExecutionProperties properties,
+ std::vector<DispatchEndpoint> dispatch_list,
gsl::not_null<Auth const*> const& auth,
gsl::not_null<Statistics*> const& stats,
gsl::not_null<Progress*> const& progress,
@@ -795,9 +792,8 @@ class Executor {
gsl::not_null<const RepositoryConfig*> repo_config_;
IExecutionApi const& local_api_;
IExecutionApi const& remote_api_;
- std::map<std::string, std::string> properties_;
- std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>
- dispatch_list_;
+ ExecutionProperties properties_;
+ std::vector<DispatchEndpoint> dispatch_list_;
Auth const& auth_;
gsl::not_null<Statistics*> stats_;
gsl::not_null<Progress*> progress_;
@@ -821,9 +817,8 @@ class Rebuilder {
gsl::not_null<IExecutionApi const*> const& local_api,
gsl::not_null<IExecutionApi const*> const& remote_api,
gsl::not_null<IExecutionApi const*> const& api_cached,
- std::map<std::string, std::string> properties,
- std::vector<std::pair<std::map<std::string, std::string>,
- ServerAddress>> dispatch_list,
+ ExecutionProperties properties,
+ std::vector<DispatchEndpoint> dispatch_list,
gsl::not_null<Auth const*> const& auth,
gsl::not_null<Statistics*> const& stats,
gsl::not_null<Progress*> const& progress,
@@ -913,9 +908,8 @@ class Rebuilder {
IExecutionApi const& local_api_;
IExecutionApi const& remote_api_;
IExecutionApi const& api_cached_;
- std::map<std::string, std::string> properties_;
- std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>
- dispatch_list_;
+ ExecutionProperties properties_;
+ std::vector<DispatchEndpoint> dispatch_list_;
Auth const& auth_;
gsl::not_null<Statistics*> stats_;
gsl::not_null<Progress*> progress_;
diff --git a/src/buildtool/graph_traverser/graph_traverser.hpp b/src/buildtool/graph_traverser/graph_traverser.hpp
index 5cc59d9b..3a4f3d96 100644
--- a/src/buildtool/graph_traverser/graph_traverser.hpp
+++ b/src/buildtool/graph_traverser/graph_traverser.hpp
@@ -76,9 +76,8 @@ class GraphTraverser {
explicit GraphTraverser(
CommandLineArguments clargs,
gsl::not_null<const RepositoryConfig*> const& repo_config,
- std::map<std::string, std::string> platform_properties,
- std::vector<std::pair<std::map<std::string, std::string>,
- ServerAddress>> dispatch_list,
+ ExecutionProperties platform_properties,
+ std::vector<DispatchEndpoint> dispatch_list,
gsl::not_null<Statistics*> const& stats,
gsl::not_null<Progress*> const& progress,
gsl::not_null<ApiBundle const*> const& apis,
@@ -227,9 +226,8 @@ class GraphTraverser {
private:
CommandLineArguments const clargs_;
gsl::not_null<const RepositoryConfig*> repo_config_;
- std::map<std::string, std::string> platform_properties_;
- std::vector<std::pair<std::map<std::string, std::string>, ServerAddress>>
- dispatch_list_;
+ ExecutionProperties platform_properties_;
+ std::vector<DispatchEndpoint> dispatch_list_;
gsl::not_null<Statistics*> stats_;
gsl::not_null<Progress*> progress_;
ApiBundle const& apis_;
diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp
index 3ee2a3b1..6cae3d8b 100644
--- a/src/buildtool/serve_api/serve_service/target.cpp
+++ b/src/buildtool/serve_api/serve_service/target.cpp
@@ -46,7 +46,7 @@
auto TargetService::GetDispatchList(
ArtifactDigest const& dispatch_digest) noexcept
- -> expected<dispatch_t, ::grpc::Status> {
+ -> expected<std::vector<DispatchEndpoint>, ::grpc::Status> {
// get blob from remote cas
auto const& dispatch_info = Artifact::ObjectInfo{.digest = dispatch_digest,
.type = ObjectType::File};
@@ -142,7 +142,7 @@ auto TargetService::ServeTarget(
// Important: we will need to pass these platform properties also to the
// executor (via the graph_traverser) in order for the build to be properly
// dispatched to the correct remote-execution endpoint.
- auto platform_properties = std::map<std::string, std::string>{};
+ auto platform_properties = ExecutionProperties{};
for (auto const& p : request->execution_properties()) {
platform_properties[p.name()] = p.value();
}
diff --git a/src/buildtool/serve_api/serve_service/target.hpp b/src/buildtool/serve_api/serve_service/target.hpp
index 1ce7fad2..aaf9bb39 100644
--- a/src/buildtool/serve_api/serve_service/target.hpp
+++ b/src/buildtool/serve_api/serve_service/target.hpp
@@ -139,17 +139,13 @@ class TargetService final : public justbuild::just_serve::Target::Service {
ServeApi const* const serve_ = nullptr;
std::shared_ptr<Logger> logger_{std::make_shared<Logger>("target-service")};
- // type of dispatch list; reduces verbosity
- using dispatch_t = std::vector<
- std::pair<std::map<std::string, std::string>, ServerAddress>>;
-
/// \brief Get from remote and parse the endpoint configuration. The method
/// also ensures the content has the expected format.
/// \returns The dispatch list stored as JSON object on success or an
/// unexpected error as grpc::Status.
[[nodiscard]] auto GetDispatchList(
ArtifactDigest const& dispatch_digest) noexcept
- -> expected<dispatch_t, ::grpc::Status>;
+ -> expected<std::vector<DispatchEndpoint>, ::grpc::Status>;
/// \brief Handles the processing of the log after a failed analysis or
/// build. Will populate the response as needed and set the status to be