diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-07-25 14:53:18 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-07-30 12:10:06 +0200 |
commit | 8669d48933731f224474a9b1dc55824f87ae26a7 (patch) | |
tree | 7d097fdf3f89e5fc88899c8e7f4723a4870f3e60 /src | |
parent | 69f56ad981da59f026c83b321522ad68283934c5 (diff) | |
download | justbuild-8669d48933731f224474a9b1dc55824f87ae26a7.tar.gz |
Use LocalContext in execution and serve services
The context is passed by not_null const pointer in order to avoid
binding to temporaries, and it or parts of it get stored by const
ref where needed.
Diffstat (limited to 'src')
14 files changed, 100 insertions, 116 deletions
diff --git a/src/buildtool/execution_api/execution_service/TARGETS b/src/buildtool/execution_api/execution_service/TARGETS index 7d82602c..270d103d 100644 --- a/src/buildtool/execution_api/execution_service/TARGETS +++ b/src/buildtool/execution_api/execution_service/TARGETS @@ -9,6 +9,7 @@ [ "operation_cache" , ["@", "gsl", "", "gsl"] , ["src/buildtool/execution_api/common", "common"] + , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/storage", "storage"] @@ -33,6 +34,7 @@ , "stage": ["src", "buildtool", "execution_api", "execution_service"] , "deps": [ ["@", "gsl", "", "gsl"] + , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/storage", "storage"] @@ -49,10 +51,11 @@ , "proto": [["@", "bazel_remote_apis", "", "remote_execution_proto"]] , "stage": ["src", "buildtool", "execution_api", "execution_service"] , "deps": - [ ["src/buildtool/logging", "logging"] + [ ["@", "gsl", "", "gsl"] + , ["src/buildtool/execution_api/local", "context"] + , ["src/buildtool/logging", "logging"] , ["src/buildtool/common", "bazel_types"] , ["src/buildtool/storage", "storage"] - , ["@", "gsl", "", "gsl"] , ["src/buildtool/storage", "config"] ] , "private-deps": @@ -71,8 +74,7 @@ , "stage": ["src", "buildtool", "execution_api", "execution_service"] , "deps": [ ["src/buildtool/execution_api/common", "api_bundle"] - , ["src/buildtool/storage", "config"] - , ["src/buildtool/storage", "storage"] + , ["src/buildtool/execution_api/local", "context"] ] , "private-deps": [ "execution_server" @@ -86,7 +88,6 @@ , ["src/buildtool/logging", "logging"] , ["@", "json", "", "json"] , ["@", "grpc", "", "grpc++"] - , ["src/buildtool/execution_api/remote", "config"] , ["@", "fmt", "", "fmt"] , ["src/buildtool/compatibility", "compatibility"] , ["src/buildtool/common/remote", "port"] @@ -101,6 +102,7 @@ , "stage": ["src", "buildtool", "execution_api", "execution_service"] , "deps": [ ["@", "gsl", "", "gsl"] + , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/logging", "logging"] , ["src/buildtool/storage", "storage"] , ["src/buildtool/storage", "config"] diff --git a/src/buildtool/execution_api/execution_service/ac_server.hpp b/src/buildtool/execution_api/execution_service/ac_server.hpp index 3072c70a..59b8297f 100644 --- a/src/buildtool/execution_api/execution_service/ac_server.hpp +++ b/src/buildtool/execution_api/execution_service/ac_server.hpp @@ -18,6 +18,7 @@ #include "build/bazel/remote/execution/v2/remote_execution.grpc.pb.h" #include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/storage/config.hpp" #include "src/buildtool/storage/storage.hpp" @@ -25,9 +26,9 @@ class ActionCacheServiceImpl final : public bazel_re::ActionCache::Service { public: explicit ActionCacheServiceImpl( - gsl::not_null<StorageConfig const*> const& storage_config, - gsl::not_null<Storage const*> const& storage) noexcept - : storage_config_{*storage_config}, storage_{*storage} {} + gsl::not_null<LocalContext const*> const& local_context) noexcept + : storage_config_{*local_context->storage_config}, + storage_{*local_context->storage} {} // Retrieve a cached execution result. // diff --git a/src/buildtool/execution_api/execution_service/bytestream_server.hpp b/src/buildtool/execution_api/execution_service/bytestream_server.hpp index 870aed77..e246da0c 100644 --- a/src/buildtool/execution_api/execution_service/bytestream_server.hpp +++ b/src/buildtool/execution_api/execution_service/bytestream_server.hpp @@ -17,6 +17,7 @@ #include "google/bytestream/bytestream.grpc.pb.h" #include "gsl/gsl" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/storage/config.hpp" #include "src/buildtool/storage/storage.hpp" @@ -24,9 +25,9 @@ class BytestreamServiceImpl : public ::google::bytestream::ByteStream::Service { public: explicit BytestreamServiceImpl( - gsl::not_null<StorageConfig const*> const& storage_config, - gsl::not_null<Storage const*> const& storage) noexcept - : storage_config_{*storage_config}, storage_{*storage} {} + gsl::not_null<LocalContext const*> const& local_context) noexcept + : storage_config_{*local_context->storage_config}, + storage_{*local_context->storage} {} // `Read()` is used to retrieve the contents of a resource as a sequence // of bytes. The bytes are returned in a sequence of responses, and the diff --git a/src/buildtool/execution_api/execution_service/cas_server.hpp b/src/buildtool/execution_api/execution_service/cas_server.hpp index 5ad9e799..3c84ade1 100644 --- a/src/buildtool/execution_api/execution_service/cas_server.hpp +++ b/src/buildtool/execution_api/execution_service/cas_server.hpp @@ -21,6 +21,7 @@ #include "build/bazel/remote/execution/v2/remote_execution.grpc.pb.h" #include "gsl/gsl" #include "src/buildtool/common/bazel_types.hpp" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/storage/config.hpp" #include "src/buildtool/storage/storage.hpp" @@ -29,9 +30,9 @@ class CASServiceImpl final : public bazel_re::ContentAddressableStorage::Service { public: explicit CASServiceImpl( - gsl::not_null<StorageConfig const*> const& storage_config, - gsl::not_null<Storage const*> const& storage) noexcept - : storage_config_{*storage_config}, storage_{*storage} {} + gsl::not_null<LocalContext const*> const& local_context) noexcept + : storage_config_{*local_context->storage_config}, + storage_{*local_context->storage} {} // Determine if blobs are present in the CAS. // diff --git a/src/buildtool/execution_api/execution_service/execution_server.hpp b/src/buildtool/execution_api/execution_service/execution_server.hpp index 7107ed45..e09f028b 100644 --- a/src/buildtool/execution_api/execution_service/execution_server.hpp +++ b/src/buildtool/execution_api/execution_service/execution_server.hpp @@ -25,6 +25,7 @@ #include "src/buildtool/common/bazel_types.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" #include "src/buildtool/execution_api/execution_service/operation_cache.hpp" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/storage/config.hpp" #include "src/buildtool/storage/storage.hpp" @@ -32,12 +33,11 @@ class ExecutionServiceImpl final : public bazel_re::Execution::Service { public: explicit ExecutionServiceImpl( - gsl::not_null<StorageConfig const*> const& storage_config, - gsl::not_null<Storage const*> const& storage, + gsl::not_null<LocalContext const*> const& local_context, gsl::not_null<IExecutionApi const*> const& local_api, std::optional<std::uint8_t> op_exponent) noexcept - : storage_config_{*storage_config}, - storage_{*storage}, + : storage_config_{*local_context->storage_config}, + storage_{*local_context->storage}, api_{*local_api} { if (op_exponent) { op_cache_.SetExponent(*op_exponent); diff --git a/src/buildtool/execution_api/execution_service/server_implementation.cpp b/src/buildtool/execution_api/execution_service/server_implementation.cpp index 73734840..11be6309 100644 --- a/src/buildtool/execution_api/execution_service/server_implementation.cpp +++ b/src/buildtool/execution_api/execution_service/server_implementation.cpp @@ -81,15 +81,13 @@ auto ServerImpl::Create(std::optional<std::string> interface, return std::move(server); } -auto ServerImpl::Run(StorageConfig const& storage_config, - Storage const& storage, +auto ServerImpl::Run(gsl::not_null<LocalContext const*> const& local_context, ApiBundle const& apis, std::optional<std::uint8_t> op_exponent) -> bool { - ExecutionServiceImpl es{ - &storage_config, &storage, &*apis.local, op_exponent}; - ActionCacheServiceImpl ac{&storage_config, &storage}; - CASServiceImpl cas{&storage_config, &storage}; - BytestreamServiceImpl b{&storage_config, &storage}; + ExecutionServiceImpl es{local_context, &*apis.local, op_exponent}; + ActionCacheServiceImpl ac{local_context}; + CASServiceImpl cas{local_context}; + BytestreamServiceImpl b{local_context}; CapabilitiesServiceImpl cap{}; OperarationsServiceImpl op{&es.GetOpCache()}; diff --git a/src/buildtool/execution_api/execution_service/server_implementation.hpp b/src/buildtool/execution_api/execution_service/server_implementation.hpp index d9e16dad..4df8375f 100644 --- a/src/buildtool/execution_api/execution_service/server_implementation.hpp +++ b/src/buildtool/execution_api/execution_service/server_implementation.hpp @@ -20,9 +20,9 @@ #include <optional> #include <string> +#include "gsl/gsl" #include "src/buildtool/execution_api/common/api_bundle.hpp" -#include "src/buildtool/storage/config.hpp" -#include "src/buildtool/storage/storage.hpp" +#include "src/buildtool/execution_api/local/context.hpp" class ServerImpl final { public: @@ -42,13 +42,11 @@ class ServerImpl final { auto operator=(ServerImpl&&) noexcept -> ServerImpl& = default; /// \brief Start the execution service. - /// \param storage_config StorageConfig to be used. - /// \param storage Storage to be used. + /// \param local_context The LocalContext to be used. /// \param apis Apis to be used, only local api is actually /// needed. /// \param op_exponent Log2 threshold for operation cache. - auto Run(StorageConfig const& storage_config, - Storage const& storage, + auto Run(gsl::not_null<LocalContext const*> const& local_context, ApiBundle const& apis, std::optional<std::uint8_t> op_exponent) -> bool; diff --git a/src/buildtool/main/main.cpp b/src/buildtool/main/main.cpp index 774f1356..1676cbb4 100644 --- a/src/buildtool/main/main.cpp +++ b/src/buildtool/main/main.cpp @@ -822,8 +822,7 @@ auto main(int argc, char* argv[]) -> int { &retry_config, &remote_exec_config}; - return execution_server->Run(*storage_config, - storage, + return execution_server->Run(&local_context, exec_apis, arguments.service.op_exponent) ? kExitSuccess @@ -894,9 +893,7 @@ auto main(int argc, char* argv[]) -> int { with_execute ? arguments.service.op_exponent : std::nullopt; return serve_server->Run(*serve_config, - *storage_config, - storage, - *local_exec_config, + &local_context, serve, serve_apis, op_exponent, diff --git a/src/buildtool/serve_api/serve_service/TARGETS b/src/buildtool/serve_api/serve_service/TARGETS index 7dbcc01d..18d04bc2 100644 --- a/src/buildtool/serve_api/serve_service/TARGETS +++ b/src/buildtool/serve_api/serve_service/TARGETS @@ -19,6 +19,7 @@ , ["src/buildtool/execution_api/common", "common"] , ["src/buildtool/execution_api/remote", "config"] , ["src/buildtool/execution_api/common", "api_bundle"] + , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/file_system", "git_types"] , ["src/buildtool/file_system/symlinks_map", "pragma_special"] , ["src/buildtool/file_system/symlinks_map", "resolve_symlinks_map"] @@ -54,9 +55,7 @@ , ["src/buildtool/serve_api/remote", "serve_api"] , ["src/buildtool/execution_api/common", "api_bundle"] , ["src/buildtool/execution_api/execution_service", "operation_cache"] - , ["src/buildtool/execution_api/local", "config"] - , ["src/buildtool/storage", "config"] - , ["src/buildtool/storage", "storage"] + , ["src/buildtool/execution_api/local", "context"] ] , "stage": ["src", "buildtool", "serve_api", "serve_service"] , "private-deps": @@ -89,11 +88,9 @@ , ["src/buildtool/common/remote", "remote_common"] , ["src/buildtool/execution_api/common", "api_bundle"] , ["src/buildtool/execution_api/common", "common"] - , ["src/buildtool/execution_api/local", "config"] + , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/serve_api/remote", "config"] , ["src/utils/cpp", "expected"] - , ["src/buildtool/storage", "config"] - , ["src/buildtool/storage", "storage"] ] , "stage": ["src", "buildtool", "serve_api", "serve_service"] , "private-deps": @@ -110,7 +107,6 @@ , ["src/buildtool/common/remote", "retry_config"] , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/execution_api/remote", "config"] - , ["src/buildtool/execution_api/local", "context"] , ["src/buildtool/file_system", "file_system_manager"] , ["src/buildtool/graph_traverser", "graph_traverser"] , ["src/buildtool/logging", "log_level"] diff --git a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp index 75d3682d..fac31fbe 100644 --- a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp +++ b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp @@ -87,35 +87,33 @@ auto ServeServerImpl::Create(std::optional<std::string> interface, return std::move(server); } -auto ServeServerImpl::Run(RemoteServeConfig const& serve_config, - StorageConfig const& storage_config, - Storage const& storage, - LocalExecutionConfig const& local_exec_config, - std::optional<ServeApi> const& serve, - ApiBundle const& apis, - std::optional<std::uint8_t> op_exponent, - bool with_execute) -> bool { +auto ServeServerImpl::Run( + RemoteServeConfig const& serve_config, + gsl::not_null<LocalContext const*> const& local_context, + std::optional<ServeApi> const& serve, + ApiBundle const& apis, + std::optional<std::uint8_t> op_exponent, + bool with_execute) -> bool { // make sure the git root directory is properly initialized - if (not FileSystemManager::CreateDirectory(storage_config.GitRoot())) { + if (not FileSystemManager::CreateDirectory( + local_context->storage_config->GitRoot())) { Logger::Log(LogLevel::Error, "Could not create directory {}. Aborting", - storage_config.GitRoot().string()); + local_context->storage_config->GitRoot().string()); return false; } - if (not GitRepo::InitAndOpen(storage_config.GitRoot(), true)) { - Logger::Log(LogLevel::Error, - fmt::format("could not initialize bare git repository {}", - storage_config.GitRoot().string())); + if (not GitRepo::InitAndOpen(local_context->storage_config->GitRoot(), + true)) { + Logger::Log( + LogLevel::Error, + fmt::format("could not initialize bare git repository {}", + local_context->storage_config->GitRoot().string())); return false; } - SourceTreeService sts{&serve_config, &storage_config, &storage, &apis}; - TargetService ts{&serve_config, - &storage_config, - &storage, - &local_exec_config, - &apis, - serve ? &*serve : nullptr}; + SourceTreeService sts{&serve_config, local_context, &apis}; + TargetService ts{ + &serve_config, local_context, &apis, serve ? &*serve : nullptr}; ConfigurationService cs{&apis.remote_config}; grpc::ServerBuilder builder; @@ -127,10 +125,10 @@ auto ServeServerImpl::Run(RemoteServeConfig const& serve_config, // the user has not given any remote-execution endpoint // so we start a "just-execute instance" on the same process [[maybe_unused]] ExecutionServiceImpl es{ - &storage_config, &storage, &*apis.local, op_exponent}; - [[maybe_unused]] ActionCacheServiceImpl ac{&storage_config, &storage}; - [[maybe_unused]] CASServiceImpl cas{&storage_config, &storage}; - [[maybe_unused]] BytestreamServiceImpl b{&storage_config, &storage}; + local_context, &*apis.local, op_exponent}; + [[maybe_unused]] ActionCacheServiceImpl ac{local_context}; + [[maybe_unused]] CASServiceImpl cas{local_context}; + [[maybe_unused]] BytestreamServiceImpl b{local_context}; [[maybe_unused]] CapabilitiesServiceImpl cap{}; [[maybe_unused]] OperarationsServiceImpl op{&es.GetOpCache()}; if (with_execute) { diff --git a/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp b/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp index d3e470fd..4f12ea68 100644 --- a/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp +++ b/src/buildtool/serve_api/serve_service/serve_server_implementation.hpp @@ -19,13 +19,12 @@ #include <optional> #include <string> +#include "gsl/gsl" #include "src/buildtool/execution_api/common/api_bundle.hpp" -#include "src/buildtool/execution_api/local/config.hpp" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/serve_api/remote/config.hpp" #include "src/buildtool/serve_api/remote/serve_api.hpp" -#include "src/buildtool/storage/config.hpp" -#include "src/buildtool/storage/storage.hpp" class ServeServerImpl final { public: @@ -46,16 +45,12 @@ class ServeServerImpl final { /// \brief Start the serve service. /// \param serve_config RemoteServeConfig to be used. - /// \param storage_config StorageConfig to be used. - /// \param storage Storage to be used. - /// \param local_exec_config LocalExecutionConfig to be used. + /// \param local_context Aggregate of storage and local configs to use. /// \param serve ServeApi to be used. /// \param with_execute Flag specifying if just serve should act also as /// just execute (i.e., start remote execution services with same interface) auto Run(RemoteServeConfig const& serve_config, - StorageConfig const& storage_config, - Storage const& storage, - LocalExecutionConfig const& local_exec_config, + gsl::not_null<LocalContext const*> const& local_context, std::optional<ServeApi> const& serve, ApiBundle const& apis, std::optional<std::uint8_t> op_exponent, diff --git a/src/buildtool/serve_api/serve_service/source_tree.hpp b/src/buildtool/serve_api/serve_service/source_tree.hpp index 2f6d649c..288e7da8 100644 --- a/src/buildtool/serve_api/serve_service/source_tree.hpp +++ b/src/buildtool/serve_api/serve_service/source_tree.hpp @@ -29,6 +29,7 @@ #include "src/buildtool/common/remote/remote_common.hpp" #include "src/buildtool/execution_api/common/api_bundle.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/file_system/git_types.hpp" #include "src/buildtool/file_system/symlinks_map/pragma_special.hpp" @@ -61,12 +62,11 @@ class SourceTreeService final explicit SourceTreeService( gsl::not_null<RemoteServeConfig const*> const& serve_config, - gsl::not_null<StorageConfig const*> const& storage_config, - gsl::not_null<Storage const*> const& storage, + gsl::not_null<LocalContext const*> const& local_context, gsl::not_null<ApiBundle const*> const& apis) noexcept : serve_config_{*serve_config}, - storage_{*storage}, - storage_config_{*storage_config}, + storage_{*local_context->storage}, + storage_config_{*local_context->storage_config}, apis_{*apis} {} // Retrieve the Git-subtree identifier from a given Git commit. diff --git a/src/buildtool/serve_api/serve_service/target.cpp b/src/buildtool/serve_api/serve_service/target.cpp index 1d27baf1..6ab95b8a 100644 --- a/src/buildtool/serve_api/serve_service/target.cpp +++ b/src/buildtool/serve_api/serve_service/target.cpp @@ -28,7 +28,6 @@ #include "src/buildtool/common/remote/retry_config.hpp" #include "src/buildtool/common/repository_config.hpp" #include "src/buildtool/common/statistics.hpp" -#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/execution_api/remote/config.hpp" #include "src/buildtool/file_system/file_system_manager.hpp" #include "src/buildtool/file_system/object_type.hpp" @@ -95,7 +94,7 @@ auto TargetService::HandleFailureLog( logfile.string()); }); // ...but try to give the client the proper log - auto const& cas = storage_.CAS(); + auto const& cas = local_context_.storage->CAS(); auto digest = cas.StoreBlob(logfile, /*is_executable=*/false); if (not digest) { auto msg = fmt::format("Failed to store log of failed {} to local CAS", @@ -133,13 +132,14 @@ auto TargetService::ServeTarget( ArtifactDigest{request->target_cache_key_id()}; // acquire locks - auto repo_lock = RepositoryGarbageCollector::SharedLock(storage_config_); + auto repo_lock = + RepositoryGarbageCollector::SharedLock(*local_context_.storage_config); if (!repo_lock) { auto msg = std::string("Could not acquire repo gc SharedLock"); logger_->Emit(LogLevel::Error, msg); return ::grpc::Status{::grpc::StatusCode::INTERNAL, msg}; } - auto lock = GarbageCollector::SharedLock(storage_config_); + auto lock = GarbageCollector::SharedLock(*local_context_.storage_config); if (!lock) { auto msg = std::string("Could not acquire CAS gc SharedLock"); logger_->Emit(LogLevel::Error, msg); @@ -183,7 +183,8 @@ auto TargetService::ServeTarget( } // add backend description to CAS - auto execution_backend_dgst = storage_.CAS().StoreBlob(*description); + auto execution_backend_dgst = + local_context_.storage->CAS().StoreBlob(*description); if (not execution_backend_dgst) { std::string err{ "Failed to store execution backend description in local CAS"}; @@ -196,7 +197,7 @@ auto TargetService::ServeTarget( address ? std::make_optional(ArtifactDigest(*execution_backend_dgst).hash()) : std::nullopt; - auto const& tc = storage_.TargetCache().WithShard(shard); + auto const& tc = local_context_.storage->TargetCache().WithShard(shard); auto const& tc_key = TargetCacheKey{{target_cache_key_digest, ObjectType::File}}; @@ -320,8 +321,8 @@ auto TargetService::ServeTarget( logger_->Emit(LogLevel::Error, "{}", msg); return ::grpc::Status{::grpc::StatusCode::FAILED_PRECONDITION, msg}; } - auto repo_config_path = - storage_.CAS().BlobPath(repo_key_dgst, /*is_executable=*/false); + auto repo_config_path = local_context_.storage->CAS().BlobPath( + repo_key_dgst, /*is_executable=*/false); if (not repo_config_path) { // This should not fail unless something went really bad... auto msg = fmt::format( @@ -335,7 +336,7 @@ auto TargetService::ServeTarget( RepositoryConfig repository_config{}; std::string const main_repo{"0"}; // known predefined main repository name if (auto msg = DetermineRoots(serve_config_, - storage_config_, + *local_context_.storage_config, main_repo, *repo_config_path, &repository_config, @@ -420,7 +421,8 @@ auto TargetService::ServeTarget( Progress progress{}; // setup logging for analysis and build; write into a temporary file - auto tmp_dir = storage_config_.CreateTypedTmpDir("serve-target"); + auto tmp_dir = + local_context_.storage_config->CreateTypedTmpDir("serve-target"); if (!tmp_dir) { auto msg = std::string("Could not create TmpDir"); logger_->Emit(LogLevel::Error, msg); @@ -430,7 +432,7 @@ auto TargetService::ServeTarget( Logger logger{"serve-target", {LogSinkFile::CreateFactory(tmp_log)}}; AnalyseContext analyse_ctx{.repo_config = &repository_config, - .storage = &storage_, + .storage = local_context_.storage, .statistics = &stats, .progress = &progress, .serve = serve_}; @@ -484,10 +486,7 @@ auto TargetService::ServeTarget( // Use a new ApiBundle that knows about local repository config for // traversing. - LocalContext const local_context{.exec_config = &local_exec_config_, - .storage_config = &storage_config_, - .storage = &storage_}; - ApiBundle const local_apis{&local_context, + ApiBundle const local_apis{&local_context_, &repository_config, &apis_.auth, &apis_.retry_config, @@ -584,8 +583,10 @@ auto TargetService::ServeTargetVariables( std::optional<std::string> target_file_content{std::nullopt}; bool tree_found{false}; // try in local build root Git cache - if (auto res = GetBlobContent( - storage_config_.GitRoot(), root_tree, target_file, logger_)) { + if (auto res = GetBlobContent(local_context_.storage_config->GitRoot(), + root_tree, + target_file, + logger_)) { tree_found = true; if (res->first) { if (not res->second) { @@ -738,7 +739,8 @@ auto TargetService::ServeTargetDescription( std::optional<std::string> target_file_content{std::nullopt}; bool tree_found{false}; // Get repository lock before inspecting the root git cache - auto repo_lock = RepositoryGarbageCollector::SharedLock(storage_config_); + auto repo_lock = + RepositoryGarbageCollector::SharedLock(*local_context_.storage_config); if (!repo_lock) { auto msg = std::string("Could not acquire repo gc SharedLock"); logger_->Emit(LogLevel::Error, msg); @@ -746,8 +748,10 @@ auto TargetService::ServeTargetDescription( } // try in local build root Git cache - if (auto res = GetBlobContent( - storage_config_.GitRoot(), root_tree, target_file, logger_)) { + if (auto res = GetBlobContent(local_context_.storage_config->GitRoot(), + root_tree, + target_file, + logger_)) { tree_found = true; if (res->first) { if (not res->second) { @@ -876,7 +880,7 @@ auto TargetService::ServeTargetDescription( } // acquire lock for CAS - auto lock = GarbageCollector::SharedLock(storage_config_); + auto lock = GarbageCollector::SharedLock(*local_context_.storage_config); if (!lock) { auto error_msg = fmt::format("Could not acquire gc SharedLock"); logger_->Emit(LogLevel::Error, error_msg); @@ -897,8 +901,9 @@ auto TargetService::ServeTargetDescription( logger_->Emit(LogLevel::Error, err); return ::grpc::Status{::grpc::StatusCode::INTERNAL, err}; } - if (auto dgst = storage_.CAS().StoreBlob(description_str, - /*is_executable=*/false)) { + if (auto dgst = + local_context_.storage->CAS().StoreBlob(description_str, + /*is_executable=*/false)) { auto const& artifact_dgst = ArtifactDigest{*dgst}; if (not apis_.local->RetrieveToCas( {Artifact::ObjectInfo{.digest = artifact_dgst, diff --git a/src/buildtool/serve_api/serve_service/target.hpp b/src/buildtool/serve_api/serve_service/target.hpp index aaf9bb39..88e5a205 100644 --- a/src/buildtool/serve_api/serve_service/target.hpp +++ b/src/buildtool/serve_api/serve_service/target.hpp @@ -30,12 +30,10 @@ #include "src/buildtool/common/remote/remote_common.hpp" #include "src/buildtool/execution_api/common/api_bundle.hpp" #include "src/buildtool/execution_api/common/execution_api.hpp" -#include "src/buildtool/execution_api/local/config.hpp" +#include "src/buildtool/execution_api/local/context.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/serve_api/remote/config.hpp" #include "src/buildtool/serve_api/remote/serve_api.hpp" -#include "src/buildtool/storage/config.hpp" -#include "src/buildtool/storage/storage.hpp" #include "src/utils/cpp/expected.hpp" // The target-level cache service. @@ -43,15 +41,11 @@ class TargetService final : public justbuild::just_serve::Target::Service { public: explicit TargetService( gsl::not_null<RemoteServeConfig const*> const& serve_config, - gsl::not_null<StorageConfig const*> const& storage_config, - gsl::not_null<Storage const*> const& storage, - gsl::not_null<LocalExecutionConfig const*> const& local_exec_config, + gsl::not_null<LocalContext const*> const& local_context, gsl::not_null<ApiBundle const*> const& apis, ServeApi const* serve = nullptr) noexcept : serve_config_{*serve_config}, - storage_config_{*storage_config}, - storage_{*storage}, - local_exec_config_{*local_exec_config}, + local_context_{*local_context}, apis_{*apis}, serve_{serve} {} @@ -132,9 +126,7 @@ class TargetService final : public justbuild::just_serve::Target::Service { private: RemoteServeConfig const& serve_config_; - StorageConfig const& storage_config_; - Storage const& storage_; - LocalExecutionConfig const& local_exec_config_; + LocalContext const& local_context_; ApiBundle const& apis_; ServeApi const* const serve_ = nullptr; std::shared_ptr<Logger> logger_{std::make_shared<Logger>("target-service")}; |