refactor(tvix/store): remove Arc<> from PathInfoService::from_addr

This makes PathInfoService::from_addr return a Box<dyn PathInfoService>,
rather than an Arc<dyn …>, and leaves it up to the consumers to rewrap
it into an Arc where needed.

This allows us to drop the Arc for the tvix-store daemon subcommand.

Change-Id: Ic83aa2ade6c51912281bd17c7eef7252e152b2d1
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10409
Autosubmit: flokli <flokli@flokli.de>
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Florian Klink 2023-12-17 01:32:38 +02:00 committed by flokli
parent 93a228b9a4
commit 52cad86195
5 changed files with 37 additions and 24 deletions

View file

@ -6,6 +6,7 @@ use nix_compat::store_path::StorePath;
use std::io;
use std::path::Path;
use std::path::PathBuf;
use std::sync::Arc;
use tokio::task::JoinHandle;
use tokio_listener::Listener;
use tokio_listener::SystemOptions;
@ -21,6 +22,7 @@ use tvix_castore::proto::GRPCBlobServiceWrapper;
use tvix_castore::proto::GRPCDirectoryServiceWrapper;
use tvix_castore::proto::NamedNode;
use tvix_store::pathinfoservice;
use tvix_store::pathinfoservice::PathInfoService;
use tvix_store::proto::nar_info;
use tvix_store::proto::path_info_service_server::PathInfoServiceServer;
use tvix_store::proto::GRPCPathInfoServiceWrapper;
@ -217,9 +219,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.add_service(DirectoryServiceServer::new(
GRPCDirectoryServiceWrapper::from(directory_service),
))
.add_service(PathInfoServiceServer::new(
GRPCPathInfoServiceWrapper::from(path_info_service),
));
.add_service(PathInfoServiceServer::new(GRPCPathInfoServiceWrapper::new(
path_info_service,
)));
#[cfg(feature = "tonic-reflection")]
{
@ -257,6 +259,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
)
.await?;
// Arc the PathInfoService, as we clone it .
let path_info_service: Arc<dyn PathInfoService> = path_info_service.into();
let tasks = paths
.into_iter()
.map(|path| {
@ -356,6 +361,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
)
.await?;
// Arc the PathInfoService, as TvixStoreFS requires Clone
let path_info_service: Arc<dyn PathInfoService> = path_info_service.into();
let mut fuse_daemon = tokio::task::spawn_blocking(move || {
let f = TvixStoreFs::new(
blob_service,
@ -397,6 +405,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
)
.await?;
// Arc the PathInfoService, as TvixStoreFS requires Clone
let path_info_service: Arc<dyn PathInfoService> = path_info_service.into();
tokio::task::spawn_blocking(move || {
let fs = TvixStoreFs::new(
blob_service,