From 6d233161b08c6e63b015d5fab4173597cedb0250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Gr=C3=BCnbichler?= Date: Mon, 25 Jan 2021 14:42:48 +0100 Subject: [PATCH] client: refactor catalog upload spawning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit by pulling out Result type into separate struct Signed-off-by: Fabian Grünbichler --- src/bin/proxmox-backup-client.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/bin/proxmox-backup-client.rs b/src/bin/proxmox-backup-client.rs index 041a670c..dce8f0b8 100644 --- a/src/bin/proxmox-backup-client.rs +++ b/src/bin/proxmox-backup-client.rs @@ -586,21 +586,21 @@ async fn start_garbage_collection(param: Value) -> Result { Ok(Value::Null) } +struct CatalogUploadResult { + catalog_writer: Arc>>, + result: tokio::sync::oneshot::Receiver>, +} + fn spawn_catalog_upload( client: Arc, encrypt: bool, -) -> Result< - ( - Arc>>, - tokio::sync::oneshot::Receiver> - ), Error> -{ +) -> Result { let (catalog_tx, catalog_rx) = std::sync::mpsc::sync_channel(10); // allow to buffer 10 writes let catalog_stream = crate::tools::StdChannelStream(catalog_rx); let catalog_chunk_size = 512*1024; let catalog_chunk_stream = ChunkStream::new(catalog_stream, Some(catalog_chunk_size)); - let catalog = Arc::new(Mutex::new(CatalogWriter::new(crate::tools::StdChannelWriter::new(catalog_tx))?)); + let catalog_writer = Arc::new(Mutex::new(CatalogWriter::new(crate::tools::StdChannelWriter::new(catalog_tx))?)); let (catalog_result_tx, catalog_result_rx) = tokio::sync::oneshot::channel(); @@ -617,7 +617,7 @@ fn spawn_catalog_upload( let _ = catalog_result_tx.send(catalog_upload_result); }); - Ok((catalog, catalog_result_rx)) + Ok(CatalogUploadResult { catalog_writer, result: catalog_result_rx }) } fn keyfile_parameters(param: &Value) -> Result<(Option>, CryptMode), Error> { @@ -990,7 +990,7 @@ async fn create_backup( let mut manifest = BackupManifest::new(snapshot); let mut catalog = None; - let mut catalog_result_tx = None; + let mut catalog_result_rx = None; for (backup_type, filename, target, size) in upload_list { match backup_type { @@ -1011,9 +1011,9 @@ async fn create_backup( BackupSpecificationType::PXAR => { // start catalog upload on first use if catalog.is_none() { - let (cat, res) = spawn_catalog_upload(client.clone(), crypt_mode == CryptMode::Encrypt)?; - catalog = Some(cat); - catalog_result_tx = Some(res); + let catalog_upload_res = spawn_catalog_upload(client.clone(), crypt_mode == CryptMode::Encrypt)?; + catalog = Some(catalog_upload_res.catalog_writer); + catalog_result_rx = Some(catalog_upload_res.result); } let catalog = catalog.as_ref().unwrap(); @@ -1065,7 +1065,7 @@ async fn create_backup( drop(catalog); // close upload stream - if let Some(catalog_result_rx) = catalog_result_tx { + if let Some(catalog_result_rx) = catalog_result_rx { let stats = catalog_result_rx.await??; manifest.add_file(CATALOG_NAME.to_owned(), stats.size, stats.csum, crypt_mode)?; }