summaryrefslogtreecommitdiff
path: root/src/buildtool/serve_api/serve_service/source_tree.cpp
diff options
context:
space:
mode:
authorPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-10-24 11:25:08 +0200
committerPaul Cristian Sarbu <paul.cristian.sarbu@huawei.com>2024-10-25 13:00:43 +0200
commit56b367d4104b2476d9aa2027c8a28d0dc5ba4f2d (patch)
treecabeb4db76364d6678c7d55a9f1c3d2658fe3e13 /src/buildtool/serve_api/serve_service/source_tree.cpp
parentb98addc8f8e3e62e1213cd967f20aa631057f84e (diff)
downloadjustbuild-56b367d4104b2476d9aa2027c8a28d0dc5ba4f2d.tar.gz
serve service: Use digest when requesting serve to set up a tree
...instead of passing just the Git hash, which imposes the remote to always be native. The serve service proto file is updated accordingly.
Diffstat (limited to 'src/buildtool/serve_api/serve_service/source_tree.cpp')
-rw-r--r--src/buildtool/serve_api/serve_service/source_tree.cpp42
1 files changed, 16 insertions, 26 deletions
diff --git a/src/buildtool/serve_api/serve_service/source_tree.cpp b/src/buildtool/serve_api/serve_service/source_tree.cpp
index 0e629d8d..3478a377 100644
--- a/src/buildtool/serve_api/serve_service/source_tree.cpp
+++ b/src/buildtool/serve_api/serve_service/source_tree.cpp
@@ -1665,7 +1665,6 @@ auto SourceTreeService::GetRemoteTree(
::grpc::ServerContext* /* context */,
const ::justbuild::just_serve::GetRemoteTreeRequest* request,
GetRemoteTreeResponse* response) -> ::grpc::Status {
- auto const& tree_id{request->tree()};
// acquire locks
auto lock = GarbageCollector::SharedLock(*native_context_->storage_config);
if (not lock) {
@@ -1675,15 +1674,12 @@ auto SourceTreeService::GetRemoteTree(
}
// get tree from remote CAS into tmp dir
- auto const digest = ArtifactDigestFactory::Create(
- native_context_->storage_config->hash_function.GetType(),
- tree_id,
- 0,
- /*is_tree=*/true);
- if (not digest or not apis_.remote->IsAvailable(*digest)) {
+ auto const remote_digest = ArtifactDigestFactory::FromBazel(
+ apis_.hash_function.GetType(), request->digest());
+ if (not remote_digest or not apis_.remote->IsAvailable(*remote_digest)) {
logger_->Emit(LogLevel::Error,
"Remote CAS does not contain expected tree {}",
- tree_id);
+ remote_digest->hash());
response->set_status(GetRemoteTreeResponse::FAILED_PRECONDITION);
return ::grpc::Status::OK;
}
@@ -1693,42 +1689,36 @@ auto SourceTreeService::GetRemoteTree(
logger_->Emit(LogLevel::Error,
"Failed to create tmp directory for copying git-tree {} "
"from remote CAS",
- digest->hash());
+ remote_digest->hash());
response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR);
return ::grpc::Status::OK;
}
if (not apis_.remote->RetrieveToPaths(
- {Artifact::ObjectInfo{.digest = *digest, .type = ObjectType::Tree}},
+ {Artifact::ObjectInfo{.digest = *remote_digest,
+ .type = ObjectType::Tree}},
{tmp_dir->GetPath()},
&(*apis_.local))) {
logger_->Emit(LogLevel::Error,
"Failed to retrieve tree {} from remote CAS",
- tree_id);
+ remote_digest->hash());
response->set_status(GetRemoteTreeResponse::FAILED_PRECONDITION);
return ::grpc::Status::OK;
}
// Import from tmp dir to Git cache
- auto res =
- CommonImportToGit(tmp_dir->GetPath(),
- fmt::format("Content of tree {}", tree_id) // message
- );
+ auto res = CommonImportToGit(
+ tmp_dir->GetPath(),
+ fmt::format("Content of tree {}", remote_digest->hash()) // message
+ );
if (not res) {
// report the error
logger_->Emit(LogLevel::Error, "{}", res.error());
response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR);
return ::grpc::Status::OK;
}
- auto const& imported_tree_id = *res;
- // sanity check
- if (imported_tree_id != tree_id) {
- logger_->Emit(
- LogLevel::Error,
- "Unexpected mismatch in imported tree:\nexpected {}, but got {}",
- tree_id,
- imported_tree_id);
- response->set_status(GetRemoteTreeResponse::INTERNAL_ERROR);
- return ::grpc::Status::OK;
- }
+ logger_->Emit(LogLevel::Debug,
+ "GetRemoteTree: imported tree {} to Git as {}",
+ remote_digest->hash(),
+ *res);
// success!
response->set_status(GetRemoteTreeResponse::OK);
return ::grpc::Status::OK;