rest-server: cleanup_old_tasks: improve error handling
by not bubbling up most errors, and continuing on. this avoids that we stop cleaning up because e.g. one directory was missing. Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
parent
2bda552b55
commit
6c856eed5e
@ -20,6 +20,7 @@ use proxmox_lang::try_block;
|
|||||||
use proxmox_schema::upid::UPID;
|
use proxmox_schema::upid::UPID;
|
||||||
use proxmox_sys::fs::{atomic_open_or_create_file, create_path, replace_file, CreateOptions};
|
use proxmox_sys::fs::{atomic_open_or_create_file, create_path, replace_file, CreateOptions};
|
||||||
use proxmox_sys::linux::procfs;
|
use proxmox_sys::linux::procfs;
|
||||||
|
use proxmox_sys::task_warn;
|
||||||
|
|
||||||
use proxmox_sys::logrotate::{LogRotate, LogRotateFiles};
|
use proxmox_sys::logrotate::{LogRotate, LogRotateFiles};
|
||||||
use proxmox_sys::WorkerTaskContext;
|
use proxmox_sys::WorkerTaskContext;
|
||||||
@ -228,7 +229,7 @@ pub fn rotate_task_log_archive(
|
|||||||
|
|
||||||
/// removes all task logs that are older than the oldest task entry in the
|
/// removes all task logs that are older than the oldest task entry in the
|
||||||
/// task archive
|
/// task archive
|
||||||
pub fn cleanup_old_tasks(compressed: bool) -> Result<(), Error> {
|
pub fn cleanup_old_tasks(worker: &dyn WorkerTaskContext, compressed: bool) -> Result<(), Error> {
|
||||||
let setup = worker_task_setup()?;
|
let setup = worker_task_setup()?;
|
||||||
|
|
||||||
let _lock = setup.lock_task_list_files(true)?;
|
let _lock = setup.lock_task_list_files(true)?;
|
||||||
@ -262,18 +263,44 @@ pub fn cleanup_old_tasks(compressed: bool) -> Result<(), Error> {
|
|||||||
for i in 0..256 {
|
for i in 0..256 {
|
||||||
let mut path = setup.taskdir.clone();
|
let mut path = setup.taskdir.clone();
|
||||||
path.push(format!("{:02X}", i));
|
path.push(format!("{:02X}", i));
|
||||||
for file in std::fs::read_dir(path)? {
|
let files = match std::fs::read_dir(path) {
|
||||||
let file = file?;
|
Ok(files) => files,
|
||||||
|
Err(err) if err.kind() == std::io::ErrorKind::NotFound => continue,
|
||||||
|
Err(err) => {
|
||||||
|
task_warn!(worker, "could not check task logs in '{:02X}': {}", i, err);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
for file in files {
|
||||||
|
let file = match file {
|
||||||
|
Ok(file) => file,
|
||||||
|
Err(err) => {
|
||||||
|
task_warn!(
|
||||||
|
worker,
|
||||||
|
"could not check some task log in '{:02X}': {}",
|
||||||
|
i,
|
||||||
|
err
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
let path = file.path();
|
let path = file.path();
|
||||||
|
|
||||||
let modified = get_modified(file)
|
let modified = match get_modified(file) {
|
||||||
.map_err(|err| format_err!("error getting mtime for {:?}: {}", path, err))?;
|
Ok(modified) => modified,
|
||||||
|
Err(err) => {
|
||||||
|
task_warn!(worker, "error getting mtime for '{:?}': {}", path, err);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if modified < cutoff_time {
|
if modified < cutoff_time {
|
||||||
match std::fs::remove_file(path) {
|
match std::fs::remove_file(&path) {
|
||||||
Ok(()) => {}
|
Ok(()) => {}
|
||||||
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {}
|
Err(err) if err.kind() == std::io::ErrorKind::NotFound => {}
|
||||||
Err(err) => bail!("could not remove file: {}", err),
|
Err(err) => {
|
||||||
|
task_warn!(worker, "could not remove file '{:?}': {}", path, err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user