summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-06-20 11:07:11 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-06-25 13:59:48 +0200
commita39592af10ad2a43b5d444d1bee018b72f696f6b (patch)
tree220dd450724804d5b5532b148a090bc4105ef36b /src
parentc7f83a2d2fa436bf78911e288e1f07576861601e (diff)
downloadjustbuild-a39592af10ad2a43b5d444d1bee018b72f696f6b.tar.gz
Pass ApiBundle to SourceTreeService
Diffstat (limited to 'src')
-rw-r--r--src/buildtool/serve_api/serve_service/TARGETS3
-rw-r--r--src/buildtool/serve_api/serve_service/serve_server_implementation.cpp2
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp55
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.hpp16
4 files changed, 32 insertions, 44 deletions
diff --git a/src/buildtool/serve_api/serve_service/TARGETS b/src/buildtool/serve_api/serve_service/TARGETS
index 951426f3..9e82a4f9 100644
--- a/src/buildtool/serve_api/serve_service/TARGETS
+++ b/src/buildtool/serve_api/serve_service/TARGETS
@@ -28,9 +28,6 @@
[ ["@", "fmt", "", "fmt"]
, ["src/buildtool/common", "common"]
, ["src/buildtool/compatibility", "compatibility"]
- , ["src/buildtool/execution_api/bazel_msg", "bazel_msg"]
- , ["src/buildtool/execution_api/local", "local"]
- , ["src/buildtool/execution_api/remote", "bazel"]
, ["src/buildtool/file_system", "git_repo"]
, ["src/buildtool/logging", "log_level"]
, ["src/buildtool/multithreading", "async_map_utils"]
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 82b15cca..a2ea32c3 100644
--- a/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp
+++ b/src/buildtool/serve_api/serve_service/serve_server_implementation.cpp
@@ -106,7 +106,7 @@ auto ServeServerImpl::Run(RemoteServeConfig const& serve_config,
return false;
}
- SourceTreeService sts{serve_config};
+ SourceTreeService sts{serve_config, &apis};
TargetService ts{serve_config, serve, &apis};
ConfigurationService cs{};
diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp
index 7d2cb2f2..ff0cb518 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.cpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.cpp
@@ -25,9 +25,6 @@
#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
#include "src/buildtool/compatibility/native_support.hpp"
-#include "src/buildtool/execution_api/bazel_msg/bazel_common.hpp"
-#include "src/buildtool/execution_api/local/local_api.hpp"
-#include "src/buildtool/execution_api/remote/bazel/bazel_api.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
#include "src/buildtool/file_system/git_repo.hpp"
#include "src/buildtool/logging/log_level.hpp"
@@ -229,7 +226,7 @@ auto SourceTreeService::ServeCommitTree(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from local Git cache",
tree_id);
@@ -285,7 +282,7 @@ auto SourceTreeService::ServeCommitTree(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(
LogLevel::Error,
"Failed to sync tree {} from known repository {}",
@@ -348,7 +345,7 @@ auto SourceTreeService::SyncArchive(std::string const& tree_id,
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from repository {}",
tree_id,
@@ -830,11 +827,11 @@ auto SourceTreeService::ServeArchiveTree(
}
if (not content_cas_path) {
// try to retrieve it from remote CAS
- if (not(remote_api_->IsAvailable(digest) and
- remote_api_->RetrieveToCas(
+ if (not(apis_.remote->IsAvailable(digest) and
+ apis_.remote->RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::File}},
- &(*local_api_)))) {
+ &(*apis_.local)))) {
// content could not be found
response->set_status(ServeArchiveTreeResponse::NOT_FOUND);
return ::grpc::Status::OK;
@@ -966,7 +963,7 @@ auto SourceTreeService::DistdirImportToGit(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from local CAS",
tree_id);
@@ -1094,15 +1091,15 @@ auto SourceTreeService::ServeDistdirTree(
ArtifactDigest(content, 0, /*is_tree=*/false);
// check remote CAS
if ((not Compatibility::IsCompatible()) and
- remote_api_->IsAvailable(digest_clone)) {
+ apis_.remote->IsAvailable(digest_clone)) {
// retrieve content to local CAS
- if (not remote_api_->RetrieveToCas(
+ if (not apis_.remote->RetrieveToCas(
{Artifact::ObjectInfo{
.digest = digest_clone,
.type = kv.executable()
? ObjectType::Executable
: ObjectType::File}},
- &(*local_api_))) {
+ &(*apis_.local))) {
logger_->Emit(LogLevel::Error,
"Failed to retrieve content {} from "
"remote to local CAS",
@@ -1200,7 +1197,7 @@ auto SourceTreeService::ServeDistdirTree(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from local CAS",
tree_id);
@@ -1252,7 +1249,7 @@ auto SourceTreeService::ServeDistdirTree(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from local CAS",
tree_id);
@@ -1301,7 +1298,7 @@ auto SourceTreeService::ServeContent(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::File}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync content {} from local Git cache",
content);
@@ -1337,7 +1334,7 @@ auto SourceTreeService::ServeContent(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::File}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(
LogLevel::Error,
"Failed to sync content {} from known repository {}",
@@ -1361,11 +1358,11 @@ auto SourceTreeService::ServeContent(
}
}
// check also in the local CAS
- if (local_api_->IsAvailable(digest)) {
- if (not local_api_->RetrieveToCas(
+ if (apis_.local->IsAvailable(digest)) {
+ if (not apis_.local->RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::File}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync content {} from local CAS",
content);
@@ -1426,7 +1423,7 @@ auto SourceTreeService::ServeTree(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from local Git cache",
tree_id);
@@ -1471,7 +1468,7 @@ auto SourceTreeService::ServeTree(
if (not git_api.RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from known repository {}",
tree_id,
@@ -1485,7 +1482,7 @@ auto SourceTreeService::ServeTree(
}
}
// check also in the local CAS
- if (local_api_->IsAvailable(digest)) {
+ if (apis_.local->IsAvailable(digest)) {
// upload tree to remote CAS; only possible in native mode
if (Compatibility::IsCompatible()) {
logger_->Emit(LogLevel::Error,
@@ -1495,10 +1492,10 @@ auto SourceTreeService::ServeTree(
response->set_status(ServeTreeResponse::SYNC_ERROR);
return ::grpc::Status::OK;
}
- if (not local_api_->RetrieveToCas(
+ if (not apis_.local->RetrieveToCas(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
- &(*remote_api_))) {
+ &(*apis_.remote))) {
logger_->Emit(LogLevel::Error,
"Failed to sync tree {} from local CAS",
tree_id);
@@ -1573,7 +1570,7 @@ auto SourceTreeService::CheckRootTree(
response->set_status(CheckRootTreeResponse::INTERNAL_ERROR);
return ::grpc::Status::OK;
}
- if (not local_api_->RetrieveToPaths(
+ if (not apis_.local->RetrieveToPaths(
{Artifact::ObjectInfo{.digest = digest,
.type = ObjectType::Tree}},
{tmp_dir->GetPath()})) {
@@ -1629,7 +1626,7 @@ auto SourceTreeService::GetRemoteTree(
}
// get tree from remote CAS into tmp dir
auto digest = ArtifactDigest{tree_id, 0, /*is_tree=*/true};
- if (not remote_api_->IsAvailable(digest)) {
+ if (not apis_.remote->IsAvailable(digest)) {
logger_->Emit(LogLevel::Error,
"Remote CAS does not contain expected tree {}",
tree_id);
@@ -1646,10 +1643,10 @@ auto SourceTreeService::GetRemoteTree(
response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR);
return ::grpc::Status::OK;
}
- if (not remote_api_->RetrieveToPaths(
+ if (not apis_.remote->RetrieveToPaths(
{Artifact::ObjectInfo{.digest = digest, .type = ObjectType::Tree}},
{tmp_dir->GetPath()},
- &(*local_api_))) {
+ &(*apis_.local))) {
logger_->Emit(LogLevel::Error,
"Failed to retrieve tree {} from remote CAS",
tree_id);
diff --git a/src/buildtool/serve_api/serve_service/source_tree.hpp b/src/buildtool/serve_api/serve_service/source_tree.hpp
index 1b954df4..6926a809 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.hpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.hpp
@@ -56,8 +56,10 @@ class SourceTreeService final
using GetRemoteTreeResponse =
::justbuild::just_serve::GetRemoteTreeResponse;
- explicit SourceTreeService(RemoteServeConfig const& serve_config) noexcept
- : serve_config_{serve_config} {}
+ explicit SourceTreeService(
+ RemoteServeConfig const& serve_config,
+ gsl::not_null<ApiBundle const*> const& apis) noexcept
+ : serve_config_{serve_config}, apis_{*apis} {}
// Retrieve the Git-subtree identifier from a given Git commit.
//
@@ -124,17 +126,9 @@ class SourceTreeService final
private:
RemoteServeConfig const& serve_config_;
+ ApiBundle const& apis_;
mutable std::shared_mutex mutex_;
std::shared_ptr<Logger> logger_{std::make_shared<Logger>("serve-service")};
-
- // remote execution endpoint
- gsl::not_null<IExecutionApi::Ptr> const remote_api_{
- CreateExecutionApi(RemoteExecutionConfig::RemoteAddress(),
- std::nullopt,
- "serve-remote-execution")};
- // local api
- gsl::not_null<IExecutionApi::Ptr> const local_api_{
- CreateExecutionApi(std::nullopt)};
// symlinks resolver map
ResolveSymlinksMap resolve_symlinks_map_{CreateResolveSymlinksMap()};