diff --git a/src/server/worker_task.rs b/src/server/worker_task.rs index 2ce71136..4a4406e1 100644 --- a/src/server/worker_task.rs +++ b/src/server/worker_task.rs @@ -1,6 +1,6 @@ use std::collections::HashMap; use std::fs::File; -use std::io::{Read, BufRead, BufReader}; +use std::io::{Read, Write, BufRead, BufReader}; use std::panic::UnwindSafe; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::{Arc, Mutex}; @@ -32,6 +32,7 @@ pub const PROXMOX_BACKUP_TASK_DIR: &str = PROXMOX_BACKUP_TASK_DIR_M!(); pub const PROXMOX_BACKUP_TASK_LOCK_FN: &str = concat!(PROXMOX_BACKUP_TASK_DIR_M!(), "/.active.lock"); pub const PROXMOX_BACKUP_ACTIVE_TASK_FN: &str = concat!(PROXMOX_BACKUP_TASK_DIR_M!(), "/active"); pub const PROXMOX_BACKUP_INDEX_TASK_FN: &str = concat!(PROXMOX_BACKUP_TASK_DIR_M!(), "/index"); +pub const PROXMOX_BACKUP_ARCHIVE_TASK_FN: &str = concat!(PROXMOX_BACKUP_TASK_DIR_M!(), "/archive"); const MAX_INDEX_TASKS: usize = 1000; @@ -407,6 +408,19 @@ fn update_active_workers(new_upid: Option<&UPID>) -> Result, E .group(backup_user.gid), )?; + if !finish_list.is_empty() && start > 0 { + match std::fs::OpenOptions::new().append(true).create(true).open(PROXMOX_BACKUP_ARCHIVE_TASK_FN) { + Ok(mut writer) => { + for info in &finish_list[0..start] { + writer.write_all(render_task_line(&info).as_bytes())?; + } + }, + Err(err) => bail!("could not write task archive - {}", err), + } + + nix::unistd::chown(PROXMOX_BACKUP_ARCHIVE_TASK_FN, Some(backup_user.uid), Some(backup_user.gid))?; + } + drop(lock); finish_list.append(&mut active_list);