diff --git a/pbs-client/src/pxar_backup_stream.rs b/pbs-client/src/pxar_backup_stream.rs index f322566f..cdbcdfec 100644 --- a/pbs-client/src/pxar_backup_stream.rs +++ b/pbs-client/src/pxar_backup_stream.rs @@ -15,7 +15,7 @@ use nix::sys::stat::Mode; use proxmox_async::blocking::TokioWriterAdapter; use proxmox_io::StdChannelWriter; -use pbs_datastore::catalog::CatalogWriter; +use pbs_datastore::catalog::{BackupCatalogWriter, CatalogWriter}; use crate::inject_reused_chunks::InjectChunks; use crate::pxar::create::PxarWriters; @@ -42,7 +42,7 @@ impl Drop for PxarBackupStream { impl PxarBackupStream { pub fn new( dir: Dir, - catalog: Arc>>, + catalog: Option>>>, options: crate::pxar::PxarCreateOptions, boundaries: Option>, separate_payload_stream: bool, @@ -82,7 +82,10 @@ impl PxarBackupStream { let handler = async move { if let Err(err) = crate::pxar::create_archive( dir, - PxarWriters::new(writer, Some(catalog)), + PxarWriters::new( + writer, + catalog.map(|c| c as Arc>), + ), crate::pxar::Flags::DEFAULT, move |path| { log::debug!("{:?}", path); @@ -122,7 +125,7 @@ impl PxarBackupStream { pub fn open( dirname: &Path, - catalog: Arc>>, + catalog: Option>>>, options: crate::pxar::PxarCreateOptions, boundaries: Option>, separate_payload_stream: bool, diff --git a/proxmox-backup-client/src/main.rs b/proxmox-backup-client/src/main.rs index 09af912d..f1c7fbf9 100644 --- a/proxmox-backup-client/src/main.rs +++ b/proxmox-backup-client/src/main.rs @@ -192,7 +192,7 @@ async fn backup_directory>( archive_name: &str, payload_target: Option<&str>, chunk_size: Option, - catalog: Arc>>>>, + catalog: Option>>>>>, pxar_create_options: pbs_client::pxar::PxarCreateOptions, upload_options: UploadOptions, ) -> Result<(BackupStats, Option), Error> { @@ -1059,19 +1059,20 @@ async fn create_backup( }; // start catalog upload on first use - if catalog.is_none() { + if catalog.is_none() && !detection_mode.is_data() && !detection_mode.is_metadata() { let catalog_upload_res = spawn_catalog_upload(client.clone(), crypto.mode == CryptMode::Encrypt)?; catalog = Some(catalog_upload_res.catalog_writer); catalog_result_rx = Some(catalog_upload_res.result); } - let catalog = catalog.as_ref().unwrap(); log_file("directory", &filename, &target); - catalog - .lock() - .unwrap() - .start_directory(std::ffi::CString::new(target.as_str())?.as_c_str())?; + if let Some(catalog) = catalog.as_ref() { + catalog + .lock() + .unwrap() + .start_directory(std::ffi::CString::new(target.as_str())?.as_c_str())?; + } let mut previous_ref = None; let max_cache_size = if detection_mode.is_metadata() { @@ -1139,7 +1140,7 @@ async fn create_backup( &target, payload_target.as_deref(), chunk_size_opt, - catalog.clone(), + catalog.as_ref().cloned(), pxar_options, upload_options, ) @@ -1155,7 +1156,9 @@ async fn create_backup( )?; } manifest.add_file(target, stats.size, stats.csum, crypto.mode)?; - catalog.lock().unwrap().end_directory()?; + if let Some(catalog) = catalog.as_ref() { + catalog.lock().unwrap().end_directory()?; + } } (BackupSpecificationType::IMAGE, false) => { log_file("image", &filename, &target);