diff options
author | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-10-24 11:25:08 +0200 |
---|---|---|
committer | Paul Cristian Sarbu <paul.cristian.sarbu@huawei.com> | 2024-10-25 13:00:43 +0200 |
commit | 56b367d4104b2476d9aa2027c8a28d0dc5ba4f2d (patch) | |
tree | cabeb4db76364d6678c7d55a9f1c3d2658fe3e13 /src/buildtool/serve_api/serve_service/source_tree.cpp | |
parent | b98addc8f8e3e62e1213cd967f20aa631057f84e (diff) | |
download | justbuild-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.cpp | 42 |
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; |