refactor(tvix/store/bin): move service.clone right before async move

Change-Id: I7a2b951d9c9251a053a0de40f31836bda03a922d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/10408
Tested-by: BuildkiteCI
Autosubmit: flokli <flokli@flokli.de>
Reviewed-by: sterni <sternenseemann@systemli.org>
This commit is contained in:
Florian Klink 2023-12-22 14:25:41 +02:00 committed by flokli
parent 39cddb95be
commit 93a228b9a4

View file

@ -260,73 +260,77 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
let tasks = paths let tasks = paths
.into_iter() .into_iter()
.map(|path| { .map(|path| {
let blob_service = blob_service.clone(); let task: JoinHandle<io::Result<()>> = tokio::task::spawn({
let directory_service = directory_service.clone(); let blob_service = blob_service.clone();
let path_info_service = path_info_service.clone(); let directory_service = directory_service.clone();
let path_info_service = path_info_service.clone();
let task: JoinHandle<io::Result<()>> = tokio::task::spawn(async move { async move {
// Ingest the path into blob and directory service. // Ingest the path into blob and directory service.
let root_node = import::ingest_path( let root_node = import::ingest_path(
blob_service.clone(), blob_service.clone(),
directory_service.clone(), directory_service.clone(),
&path, &path,
) )
.await .await
.expect("failed to ingest path"); .expect("failed to ingest path");
// Ask the PathInfoService for the NAR size and sha256 // Ask the PathInfoService for the NAR size and sha256
let root_node_copy = root_node.clone(); let root_node_copy = root_node.clone();
let (nar_size, nar_sha256) = let (nar_size, nar_sha256) =
path_info_service.calculate_nar(&root_node_copy).await?; path_info_service.calculate_nar(&root_node_copy).await?;
let name = path let name = path
.file_name() .file_name()
.expect("path must not be ..") .expect("path must not be ..")
.to_str() .to_str()
.expect("path must be valid unicode"); .expect("path must be valid unicode");
let output_path = store_path::build_nar_based_store_path(&nar_sha256, name); let output_path =
store_path::build_nar_based_store_path(&nar_sha256, name);
// assemble a new root_node with a name that is derived from the nar hash. // assemble a new root_node with a name that is derived from the nar hash.
let root_node = let root_node =
root_node.rename(output_path.to_string().into_bytes().into()); root_node.rename(output_path.to_string().into_bytes().into());
// assemble the [crate::proto::PathInfo] object. // assemble the [crate::proto::PathInfo] object.
let path_info = PathInfo { let path_info = PathInfo {
node: Some(tvix_castore::proto::Node { node: Some(tvix_castore::proto::Node {
node: Some(root_node), node: Some(root_node),
}),
// There's no reference scanning on path contents ingested like this.
references: vec![],
narinfo: Some(NarInfo {
nar_size,
nar_sha256: nar_sha256.to_vec().into(),
signatures: vec![],
reference_names: vec![],
deriver: None,
ca: Some(nar_info::Ca {
r#type: tvix_store::proto::nar_info::ca::Hash::NarSha256.into(),
digest: nar_sha256.to_vec().into(),
}), }),
}), // There's no reference scanning on path contents ingested like this.
}; references: vec![],
narinfo: Some(NarInfo {
nar_size,
nar_sha256: nar_sha256.to_vec().into(),
signatures: vec![],
reference_names: vec![],
deriver: None,
ca: Some(nar_info::Ca {
r#type: tvix_store::proto::nar_info::ca::Hash::NarSha256
.into(),
digest: nar_sha256.to_vec().into(),
}),
}),
};
// put into [PathInfoService], and return the PathInfo that we get back // put into [PathInfoService], and return the PathInfo that we get back
// from there (it might contain additional signatures). // from there (it might contain additional signatures).
let path_info = path_info_service.put(path_info).await?; let path_info = path_info_service.put(path_info).await?;
let node = path_info.node.unwrap().node.unwrap(); let node = path_info.node.unwrap().node.unwrap();
log_node(&node, &path); log_node(&node, &path);
println!( println!(
"{}", "{}",
StorePath::from_bytes(node.get_name()) StorePath::from_bytes(node.get_name())
.unwrap() .unwrap()
.to_absolute_path() .to_absolute_path()
); );
Ok(()) Ok(())
}
}); });
task task
}) })