From bd6894d265738ca7463922d39cbc128c5dc0e6ec Mon Sep 17 00:00:00 2001 From: Florian Klink Date: Tue, 15 Oct 2024 17:10:09 +0300 Subject: fix(tvix/store/pathinfo): use gRPC NarCalculationService If the PathInfoService is using gRPC, expose it via the nar_calculation_service() method in the PathInfoService. Also pass nar_calculation_service through in tha blanket impl. This now causes a `tvix-store import` using the default config to not fall back to `SimpleRenderer`, which will calculate the NAR hash and size by downloading the uploaded blobs (and blobs it didn't need to upload) locally, making such imports faster. Change-Id: If2c3fe6584e9093cba322d2360f355a3923904ae Reviewed-on: https://cl.tvl.fyi/c/depot/+/12658 Tested-by: BuildkiteCI Reviewed-by: edef Autosubmit: flokli --- tvix/store/src/pathinfoservice/grpc.rs | 9 ++++++++- tvix/store/src/pathinfoservice/mod.rs | 6 ++++++ 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'tvix/store/src') diff --git a/tvix/store/src/pathinfoservice/grpc.rs b/tvix/store/src/pathinfoservice/grpc.rs index d292b2a784f6..453044cba13d 100644 --- a/tvix/store/src/pathinfoservice/grpc.rs +++ b/tvix/store/src/pathinfoservice/grpc.rs @@ -8,7 +8,7 @@ use futures::stream::BoxStream; use nix_compat::nixbase32; use std::sync::Arc; use tonic::{async_trait, Code}; -use tracing::{instrument, Span}; +use tracing::{instrument, warn, Span}; use tracing_indicatif::span_ext::IndicatifSpanExt; use tvix_castore::composition::{CompositionContext, ServiceBuilder}; use tvix_castore::Error; @@ -95,6 +95,13 @@ where Box::pin(stream) } + + #[instrument(level = "trace", skip_all)] + fn nar_calculation_service(&self) -> Option> { + Some(Box::new(GRPCPathInfoService { + grpc_client: self.grpc_client.clone(), + }) as Box) + } } #[async_trait] diff --git a/tvix/store/src/pathinfoservice/mod.rs b/tvix/store/src/pathinfoservice/mod.rs index 0a91d6267260..a0c48f5cc9d5 100644 --- a/tvix/store/src/pathinfoservice/mod.rs +++ b/tvix/store/src/pathinfoservice/mod.rs @@ -62,6 +62,8 @@ pub trait PathInfoService: Send + Sync { /// [async_trait] generates, but for streams instead of futures. fn list(&self) -> BoxStream<'static, Result>; + /// Returns a (more) suitable NarCalculationService. + /// This can be used to offload NAR calculation to the remote side. fn nar_calculation_service(&self) -> Option> { None } @@ -83,6 +85,10 @@ where fn list(&self) -> BoxStream<'static, Result> { self.as_ref().list() } + + fn nar_calculation_service(&self) -> Option> { + self.as_ref().nar_calculation_service() + } } /// Registers the builtin PathInfoService implementations with the registry -- cgit 1.4.1