diff options
author | Florian Klink <flokli@flokli.de> | 2023-06-09T15·22+0300 |
---|---|---|
committer | clbot <clbot@tvl.fyi> | 2023-06-12T10·24+0000 |
commit | aa7bdc1199bfbb69091dda942a82812257e30bc4 (patch) | |
tree | 933964562f5746274ef6df59cfa956aca73b0807 /tvix/store/src/nar/renderer.rs | |
parent | 7725eb53ad67730e92a3839a6c10925c668e5586 (diff) |
refactor(tvix/store): use Arc instead of Box r/6273
This allows us to blob services without closing them before putting them in a box. We currently need to use Arc<_>, not Rc<_>, because the GRPC wrappers require Sync. Change-Id: I679c5f06b62304f5b0456cfefe25a0a881de7c84 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8738 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de>
Diffstat (limited to 'tvix/store/src/nar/renderer.rs')
-rw-r--r-- | tvix/store/src/nar/renderer.rs | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/tvix/store/src/nar/renderer.rs b/tvix/store/src/nar/renderer.rs index 97dfcfee6e32..4bd31e1513e3 100644 --- a/tvix/store/src/nar/renderer.rs +++ b/tvix/store/src/nar/renderer.rs @@ -8,15 +8,18 @@ use crate::{ use count_write::CountWrite; use nix_compat::nar; use sha2::{Digest, Sha256}; -use std::io::{self, BufReader}; +use std::{ + io::{self, BufReader}, + sync::Arc, +}; use tracing::warn; /// Invoke [render_nar], and return the size and sha256 digest of the produced /// NAR output. pub fn calculate_size_and_sha256( root_node: &proto::node::Node, - blob_service: &Box<dyn BlobService>, - directory_service: &Box<dyn DirectoryService>, + blob_service: Arc<dyn BlobService>, + directory_service: Arc<dyn DirectoryService>, ) -> Result<(u64, [u8; 32]), RenderError> { let h = Sha256::new(); let mut cw = CountWrite::from(h); @@ -33,8 +36,8 @@ pub fn calculate_size_and_sha256( pub fn write_nar<W: std::io::Write>( w: &mut W, proto_root_node: &proto::node::Node, - blob_service: &Box<dyn BlobService>, - directory_service: &Box<dyn DirectoryService>, + blob_service: Arc<dyn BlobService>, + directory_service: Arc<dyn DirectoryService>, ) -> Result<(), RenderError> { // Initialize NAR writer let nar_root_node = nar::writer::open(w).map_err(RenderError::NARWriterError)?; @@ -52,8 +55,8 @@ pub fn write_nar<W: std::io::Write>( fn walk_node( nar_node: nar::writer::Node, proto_node: &proto::node::Node, - blob_service: &Box<dyn BlobService>, - directory_service: &Box<dyn DirectoryService>, + blob_service: Arc<dyn BlobService>, + directory_service: Arc<dyn DirectoryService>, ) -> Result<(), RenderError> { match proto_node { proto::node::Node::Symlink(proto_symlink_node) => { @@ -127,7 +130,7 @@ fn walk_node( walk_node( child_node, &proto_node, - blob_service, + blob_service.clone(), directory_service.clone(), )?; } |