summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-06-13 14:25:44 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-06-18 12:05:10 +0200
commit9a51bf81a860adb2f53794172d049b614739f14d (patch)
tree1086585c55c5e8a4ff83afe88e9f7c80796c3bc9 /src
parent05b734f11b7a45a1da5c38fcc1f27780c3fe4354 (diff)
downloadjustbuild-9a51bf81a860adb2f53794172d049b614739f14d.tar.gz
Make RemoteServeConfig a general struct, not a singleton
...and adjust interfaces.
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/main/main.cpp2
-rw-r--r--src/buildtool/serve_api/remote/config.hpp85
-rw-r--r--src/buildtool/serve_api/remote/serve_api.hpp4
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp18
-rw-r--r--src/buildtool/serve_api/serve_service/target.cpp18
-rw-r--r--src/buildtool/serve_api/serve_service/target_utils.cpp2
6 files changed, 28 insertions, 101 deletions
diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp
index 357bf7e9..508d980e 100644
--- a/src/buildtool/main/main.cpp
+++ b/src/buildtool/main/main.cpp
@@ -171,7 +171,7 @@ void SetupExecutionConfig(EndpointArguments const& eargs,
auto result = builder.Build();
if (auto* config = std::get_if<RemoteServeConfig>(&result)) {
- if (config->TCStrategy() == TargetCacheWriteStrategy::Disable) {
+ if (config->tc_strategy == TargetCacheWriteStrategy::Disable) {
Logger::Log(
LogLevel::Info,
"Target-level cache writing of serve service is disabled.");
diff --git a/src/buildtool/serve_api/remote/config.hpp b/src/buildtool/serve_api/remote/config.hpp
index 4e5c3c21..8c46a853 100644
--- a/src/buildtool/serve_api/remote/config.hpp
+++ b/src/buildtool/serve_api/remote/config.hpp
@@ -32,96 +32,23 @@
struct RemoteServeConfig final {
class Builder;
- // Obtain global instance
- [[nodiscard]] static auto Instance() noexcept -> RemoteServeConfig& {
- static RemoteServeConfig config;
- return config;
- }
-
- // Set remote execution and cache address, unsets if parsing `address` fails
- [[nodiscard]] auto SetRemoteAddress(std::string const& value) noexcept
- -> bool {
- return static_cast<bool>(remote_address = ParseAddress(value));
- }
-
- // Set the list of known repositories
- [[nodiscard]] auto SetKnownRepositories(
- std::vector<std::filesystem::path> const& value) noexcept -> bool {
- known_repositories = std::vector<std::filesystem::path>(
- std::make_move_iterator(value.begin()),
- std::make_move_iterator(value.end()));
- return value.size() == known_repositories.size();
- }
-
- // Set the number of jobs
- [[nodiscard]] auto SetJobs(std::size_t value) noexcept -> bool {
- return static_cast<bool>(jobs = value);
- }
-
- // Set the number of build jobs
- [[nodiscard]] auto SetBuildJobs(std::size_t value) noexcept -> bool {
- return static_cast<bool>(build_jobs = value);
- }
-
- // Set the action timeout
- [[nodiscard]] auto SetActionTimeout(
- std::chrono::milliseconds const& value) noexcept -> bool {
- action_timeout = value;
- return action_timeout > std::chrono::seconds{0};
- }
-
- void SetTCStrategy(TargetCacheWriteStrategy value) noexcept {
- tc_strategy = value;
- }
-
- // Remote execution address, if set
- [[nodiscard]] auto RemoteAddress() const noexcept
- -> std::optional<ServerAddress> {
- return remote_address;
- }
-
- // Repositories known to 'just serve'
- [[nodiscard]] auto KnownRepositories() const noexcept
- -> const std::vector<std::filesystem::path>& {
- return known_repositories;
- }
-
- // Get the number of jobs
- [[nodiscard]] auto Jobs() const noexcept -> std::size_t { return jobs; }
-
- // Get the number of build jobs
- [[nodiscard]] auto BuildJobs() const noexcept -> std::size_t {
- return build_jobs;
- }
-
- // Get the action timeout
- [[nodiscard]] auto ActionTimeout() const noexcept
- -> std::chrono::milliseconds {
- return action_timeout;
- }
-
- // Get the target-level cache write strategy
- [[nodiscard]] auto TCStrategy() const noexcept -> TargetCacheWriteStrategy {
- return tc_strategy;
- }
-
// Server address of remote execution.
- std::optional<ServerAddress> remote_address{};
+ std::optional<ServerAddress> const remote_address{};
// Known Git repositories to serve server.
- std::vector<std::filesystem::path> known_repositories{};
+ std::vector<std::filesystem::path> const known_repositories{};
// Number of jobs
- std::size_t jobs = 0;
+ std::size_t const jobs = 0;
// Number of build jobs
- std::size_t build_jobs = 0;
+ std::size_t const build_jobs = 0;
// Action timeout
- std::chrono::milliseconds action_timeout{};
+ std::chrono::milliseconds const action_timeout{};
// Strategy for synchronizing target-level cache
- TargetCacheWriteStrategy tc_strategy{TargetCacheWriteStrategy::Sync};
+ TargetCacheWriteStrategy const tc_strategy{TargetCacheWriteStrategy::Sync};
};
class RemoteServeConfig::Builder final {
diff --git a/src/buildtool/serve_api/remote/serve_api.hpp b/src/buildtool/serve_api/remote/serve_api.hpp
index 510881cb..89e287a4 100644
--- a/src/buildtool/serve_api/remote/serve_api.hpp
+++ b/src/buildtool/serve_api/remote/serve_api.hpp
@@ -49,8 +49,8 @@ class ServeApi final {
[[nodiscard]] static auto Create(
RemoteServeConfig const& serve_config) noexcept
-> std::optional<ServeApi> {
- if (auto address = serve_config.RemoteAddress()) {
- return std::make_optional<ServeApi>(*address);
+ if (serve_config.remote_address) {
+ return std::make_optional<ServeApi>(*serve_config.remote_address);
}
return std::nullopt;
}
diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp
index 62e9bf0d..7d2cb2f2 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.cpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.cpp
@@ -255,7 +255,7 @@ auto SourceTreeService::ServeCommitTree(
return ::grpc::Status::OK;
}
// try given extra repositories, in order
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto res = GetSubtreeFromCommit(path, commit, subdir, logger_);
if (std::holds_alternative<std::string>(res)) {
auto tree_id = std::get<std::string>(res);
@@ -411,7 +411,7 @@ auto SourceTreeService::ResolveContentTree(
ResolvedGitObject resolved_tree{};
bool failed{false};
{
- TaskSystem ts{serve_config_.Jobs()};
+ TaskSystem ts{serve_config_.jobs};
resolve_symlinks_map_.ConsumeAfterKeysReady(
&ts,
{GitObjectToResolve{tree_id,
@@ -746,7 +746,7 @@ auto SourceTreeService::ServeArchiveTree(
return ::grpc::Status::OK;
}
// check known repositories
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto res =
GetSubtreeFromTree(path, *archive_tree_id, subdir, logger_);
if (std::holds_alternative<std::string>(res)) {
@@ -807,7 +807,7 @@ auto SourceTreeService::ServeArchiveTree(
}
if (not content_cas_path) {
// check if content blob is in a known repository
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto res = GetBlobFromRepo(path, content, logger_);
if (std::holds_alternative<std::string>(res)) {
// add to CAS
@@ -1052,7 +1052,7 @@ auto SourceTreeService::ServeDistdirTree(
return ::grpc::Status::OK;
}
// check known repositories
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto res = GetBlobFromRepo(path, content, logger_);
if (std::holds_alternative<std::string>(res)) {
// add content to local CAS
@@ -1215,7 +1215,7 @@ auto SourceTreeService::ServeDistdirTree(
return ::grpc::Status::OK;
}
// check if tree is in a known repository
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto has_tree = IsTreeInRepo(tree_id, path, logger_);
if (not has_tree) {
logger_->Emit(LogLevel::Error,
@@ -1321,7 +1321,7 @@ auto SourceTreeService::ServeContent(
return ::grpc::Status::OK;
}
// check if content blob is in a known repository
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto res = GetBlobFromRepo(path, content, logger_);
if (std::holds_alternative<std::string>(res)) {
// upload blob to remote CAS
@@ -1438,7 +1438,7 @@ auto SourceTreeService::ServeTree(
return ::grpc::Status::OK;
}
// check if tree is in a known repository
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto has_tree = IsTreeInRepo(tree_id, path, logger_);
if (not has_tree) {
logger_->Emit(LogLevel::Error,
@@ -1542,7 +1542,7 @@ auto SourceTreeService::CheckRootTree(
return ::grpc::Status::OK;
}
// check if tree is in a known repository
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
auto has_tree = IsTreeInRepo(tree_id, path, logger_);
if (not has_tree) {
logger_->Emit(LogLevel::Error,
diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp
index 024e5bae..8e614a0e 100644
--- a/src/buildtool/serve_api/serve_service/target.cpp
+++ b/src/buildtool/serve_api/serve_service/target.cpp
@@ -430,7 +430,7 @@ auto TargetService::ServeTarget(
error_msg};
}
- BuildMaps::Target::ResultTargetMap result_map{serve_config_.Jobs()};
+ BuildMaps::Target::ResultTargetMap result_map{serve_config_.jobs};
auto configured_target = BuildMaps::Target::ConfiguredTarget{
.target = std::move(*entity), .config = std::move(config)};
@@ -459,7 +459,7 @@ auto TargetService::ServeTarget(
auto result = AnalyseTarget(&analyse_ctx,
configured_target,
&result_map,
- serve_config_.Jobs(),
+ serve_config_.jobs,
std::nullopt /*request_action_input*/,
&logger);
@@ -485,19 +485,19 @@ auto TargetService::ServeTarget(
// Clean up result map, now that it is no longer needed
{
- TaskSystem ts{serve_config_.Jobs()};
+ TaskSystem ts{serve_config_.jobs};
result_map.Clear(&ts);
}
- auto jobs = serve_config_.BuildJobs();
+ auto jobs = serve_config_.build_jobs;
if (jobs == 0) {
- jobs = serve_config_.Jobs();
+ jobs = serve_config_.jobs;
}
// setup graph traverser
GraphTraverser::CommandLineArguments traverser_args{};
traverser_args.jobs = jobs;
- traverser_args.build.timeout = serve_config_.ActionTimeout();
+ traverser_args.build.timeout = serve_config_.action_timeout;
traverser_args.stage = std::nullopt;
traverser_args.rebuild = std::nullopt;
GraphTraverser const traverser{
@@ -527,7 +527,7 @@ auto TargetService::ServeTarget(
jobs,
traverser.GetLocalApi(),
traverser.GetRemoteApi(),
- serve_config_.TCStrategy(),
+ serve_config_.tc_strategy,
tc,
&logger,
LogLevel::Error);
@@ -605,7 +605,7 @@ auto TargetService::ServeTargetVariables(
}
if (not target_file_content) {
// try given extra repositories, in order
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
if (auto res =
GetBlobContent(path, root_tree, target_file, logger_)) {
tree_found = true;
@@ -760,7 +760,7 @@ auto TargetService::ServeTargetDescription(
}
if (not target_file_content) {
// try given extra repositories, in order
- for (auto const& path : serve_config_.KnownRepositories()) {
+ for (auto const& path : serve_config_.known_repositories) {
if (auto res =
GetBlobContent(path, root_tree, target_file, logger_)) {
tree_found = true;
diff --git a/src/buildtool/serve_api/serve_service/target_utils.cpp b/src/buildtool/serve_api/serve_service/target_utils.cpp
index 3027775e..5e8411ca 100644
--- a/src/buildtool/serve_api/serve_service/target_utils.cpp
+++ b/src/buildtool/serve_api/serve_service/target_utils.cpp
@@ -62,7 +62,7 @@ auto GetServingRepository(RemoteServeConfig const& serve_config,
return StorageConfig::GitRoot();
}
// check the known repositories
- for (auto const& path : serve_config.KnownRepositories()) {
+ for (auto const& path : serve_config.known_repositories) {
if (IsTreeInRepo(tree_id, path, logger)) {
return path;
}