From 2de4dc3a81d95ad06f86e95b225736ee551fe83f Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Wed, 2 Jun 2021 13:27:03 +0200 Subject: [PATCH] backup/chunk_store: optionally log progress on creation and enable it for the worker variants Signed-off-by: Dominik Csapak --- src/api2/config/datastore.rs | 5 +++-- src/api2/node/disks/directory.rs | 2 +- src/api2/node/disks/zfs.rs | 2 +- src/backup/chunk_store.rs | 11 +++++++---- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/api2/config/datastore.rs b/src/api2/config/datastore.rs index 8032a190..316d9f97 100644 --- a/src/api2/config/datastore.rs +++ b/src/api2/config/datastore.rs @@ -54,11 +54,12 @@ pub(crate) fn do_create_datastore( _lock: std::fs::File, mut config: SectionConfigData, datastore: DataStoreConfig, + worker: Option<&dyn crate::task::TaskState>, ) -> Result<(), Error> { let path: PathBuf = datastore.path.clone().into(); let backup_user = crate::backup::backup_user()?; - let _store = ChunkStore::create(&datastore.name, path, backup_user.uid, backup_user.gid)?; + let _store = ChunkStore::create(&datastore.name, path, backup_user.uid, backup_user.gid, worker)?; config.set_data(&datastore.name, "datastore", &datastore)?; @@ -157,7 +158,7 @@ pub fn create_datastore( Some(datastore.name.to_string()), auth_id, false, - move |_worker| do_create_datastore(lock, config, datastore), + move |worker| do_create_datastore(lock, config, datastore, Some(&worker)), ) } diff --git a/src/api2/node/disks/directory.rs b/src/api2/node/disks/directory.rs index 829699ca..6f292177 100644 --- a/src/api2/node/disks/directory.rs +++ b/src/api2/node/disks/directory.rs @@ -190,7 +190,7 @@ pub fn create_datastore_disk( bail!("datastore '{}' already exists.", datastore.name); } - crate::api2::config::datastore::do_create_datastore(lock, config, datastore)?; + crate::api2::config::datastore::do_create_datastore(lock, config, datastore, Some(&worker))?; } Ok(()) diff --git a/src/api2/node/disks/zfs.rs b/src/api2/node/disks/zfs.rs index 75c53c83..89f72172 100644 --- a/src/api2/node/disks/zfs.rs +++ b/src/api2/node/disks/zfs.rs @@ -383,7 +383,7 @@ pub fn create_zpool( bail!("datastore '{}' already exists.", datastore.name); } - crate::api2::config::datastore::do_create_datastore(lock, config, datastore)?; + crate::api2::config::datastore::do_create_datastore(lock, config, datastore, Some(&worker))?; } Ok(()) diff --git a/src/backup/chunk_store.rs b/src/backup/chunk_store.rs index 31e8307c..e9cc3897 100644 --- a/src/backup/chunk_store.rs +++ b/src/backup/chunk_store.rs @@ -7,6 +7,7 @@ use std::os::unix::io::AsRawFd; use proxmox::tools::fs::{CreateOptions, create_path, create_dir}; +use crate::task_log; use crate::tools; use crate::api2::types::GarbageCollectionStatus; @@ -61,7 +62,7 @@ impl ChunkStore { chunk_dir } - pub fn create

(name: &str, path: P, uid: nix::unistd::Uid, gid: nix::unistd::Gid) -> Result + pub fn create

(name: &str, path: P, uid: nix::unistd::Uid, gid: nix::unistd::Gid, worker: Option<&dyn TaskState>) -> Result where P: Into, { @@ -104,7 +105,9 @@ impl ChunkStore { } let percentage = (i*100)/(64*1024); if percentage != last_percentage { - // eprintln!("ChunkStore::create {}%", percentage); + if let Some(worker) = worker { + task_log!(worker, "Chunkstore create: {}%", percentage) + } last_percentage = percentage; } } @@ -461,7 +464,7 @@ fn test_chunk_store1() { assert!(chunk_store.is_err()); let user = nix::unistd::User::from_uid(nix::unistd::Uid::current()).unwrap().unwrap(); - let chunk_store = ChunkStore::create("test", &path, user.uid, user.gid).unwrap(); + let chunk_store = ChunkStore::create("test", &path, user.uid, user.gid, None).unwrap(); let (chunk, digest) = super::DataChunkBuilder::new(&[0u8, 1u8]).build().unwrap(); @@ -472,7 +475,7 @@ fn test_chunk_store1() { assert!(exists); - let chunk_store = ChunkStore::create("test", &path, user.uid, user.gid); + let chunk_store = ChunkStore::create("test", &path, user.uid, user.gid, None); assert!(chunk_store.is_err()); if let Err(_e) = std::fs::remove_dir_all(".testdir") { /* ignore */ }