feat(tvix/store): display progress for NAR calculation
This is currently still taking a noticeable amount of time, so make sure we show it is happening. Change-Id: I13d18785fbf41ae4479e1ea58d61ece1d7485719 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11847 Reviewed-by: Simon Hauser <simon.hauser@helsinki-systems.de> Autosubmit: flokli <flokli@flokli.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
71a29ceff4
commit
cfab953094
2 changed files with 14 additions and 2 deletions
|
@ -6,6 +6,8 @@ use nix_compat::nar::writer::r#async as nar_writer;
|
||||||
use sha2::{Digest, Sha256};
|
use sha2::{Digest, Sha256};
|
||||||
use tokio::io::{self, AsyncWrite, BufReader};
|
use tokio::io::{self, AsyncWrite, BufReader};
|
||||||
use tonic::async_trait;
|
use tonic::async_trait;
|
||||||
|
use tracing::{instrument, Span};
|
||||||
|
use tracing_indicatif::span_ext::IndicatifSpanExt;
|
||||||
use tvix_castore::{
|
use tvix_castore::{
|
||||||
blobservice::BlobService,
|
blobservice::BlobService,
|
||||||
directoryservice::DirectoryService,
|
directoryservice::DirectoryService,
|
||||||
|
@ -48,6 +50,7 @@ where
|
||||||
|
|
||||||
/// Invoke [write_nar], and return the size and sha256 digest of the produced
|
/// Invoke [write_nar], and return the size and sha256 digest of the produced
|
||||||
/// NAR output.
|
/// NAR output.
|
||||||
|
#[instrument(skip_all, fields(indicatif.pb_show=1))]
|
||||||
pub async fn calculate_size_and_sha256<BS, DS>(
|
pub async fn calculate_size_and_sha256<BS, DS>(
|
||||||
root_node: &castorepb::node::Node,
|
root_node: &castorepb::node::Node,
|
||||||
blob_service: BS,
|
blob_service: BS,
|
||||||
|
@ -60,6 +63,10 @@ where
|
||||||
let mut h = Sha256::new();
|
let mut h = Sha256::new();
|
||||||
let mut cw = CountWrite::from(&mut h);
|
let mut cw = CountWrite::from(&mut h);
|
||||||
|
|
||||||
|
let span = Span::current();
|
||||||
|
span.pb_set_message("Calculating NAR");
|
||||||
|
span.pb_start();
|
||||||
|
|
||||||
write_nar(
|
write_nar(
|
||||||
// The hasher doesn't speak async. It doesn't
|
// The hasher doesn't speak async. It doesn't
|
||||||
// actually do any I/O, so it's fine to wrap.
|
// actually do any I/O, so it's fine to wrap.
|
||||||
|
|
|
@ -7,7 +7,8 @@ use async_stream::try_stream;
|
||||||
use futures::stream::BoxStream;
|
use futures::stream::BoxStream;
|
||||||
use nix_compat::nixbase32;
|
use nix_compat::nixbase32;
|
||||||
use tonic::{async_trait, transport::Channel, Code};
|
use tonic::{async_trait, transport::Channel, Code};
|
||||||
use tracing::instrument;
|
use tracing::{instrument, Span};
|
||||||
|
use tracing_indicatif::span_ext::IndicatifSpanExt;
|
||||||
use tvix_castore::{proto as castorepb, Error};
|
use tvix_castore::{proto as castorepb, Error};
|
||||||
|
|
||||||
/// Connects to a (remote) tvix-store PathInfoService over gRPC.
|
/// Connects to a (remote) tvix-store PathInfoService over gRPC.
|
||||||
|
@ -107,11 +108,15 @@ impl PathInfoService for GRPCPathInfoService {
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl NarCalculationService for GRPCPathInfoService {
|
impl NarCalculationService for GRPCPathInfoService {
|
||||||
#[instrument(level = "trace", skip_all, fields(root_node = ?root_node))]
|
#[instrument(level = "trace", skip_all, fields(root_node = ?root_node, indicatif.pb_show=1))]
|
||||||
async fn calculate_nar(
|
async fn calculate_nar(
|
||||||
&self,
|
&self,
|
||||||
root_node: &castorepb::node::Node,
|
root_node: &castorepb::node::Node,
|
||||||
) -> Result<(u64, [u8; 32]), Error> {
|
) -> Result<(u64, [u8; 32]), Error> {
|
||||||
|
let span = Span::current();
|
||||||
|
span.pb_set_message("Waiting for NAR calculation");
|
||||||
|
span.pb_start();
|
||||||
|
|
||||||
let path_info = self
|
let path_info = self
|
||||||
.grpc_client
|
.grpc_client
|
||||||
.clone()
|
.clone()
|
||||||
|
|
Loading…
Reference in a new issue