prune: never fail, just warn about failed removals
A removal can fail if the snapshot is already gone (this is fine, our job is done either way) or we couldn't get a lock (also fine, it can't be removed then, just warn the user so he knows what happened and why it wasn't removed) - keep going either way. Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
This commit is contained in:
parent
836c4a278d
commit
f153930066
@ -16,7 +16,6 @@ use proxmox::api::{
|
|||||||
use proxmox::api::router::SubdirMap;
|
use proxmox::api::router::SubdirMap;
|
||||||
use proxmox::api::schema::*;
|
use proxmox::api::schema::*;
|
||||||
use proxmox::tools::fs::{replace_file, CreateOptions};
|
use proxmox::tools::fs::{replace_file, CreateOptions};
|
||||||
use proxmox::try_block;
|
|
||||||
use proxmox::{http_err, identity, list_subdirs_api_method, sortable};
|
use proxmox::{http_err, identity, list_subdirs_api_method, sortable};
|
||||||
|
|
||||||
use pxar::accessor::aio::Accessor;
|
use pxar::accessor::aio::Accessor;
|
||||||
@ -692,53 +691,52 @@ fn prune(
|
|||||||
// We use a WorkerTask just to have a task log, but run synchrounously
|
// We use a WorkerTask just to have a task log, but run synchrounously
|
||||||
let worker = WorkerTask::new("prune", Some(worker_id), Userid::root_userid().clone(), true)?;
|
let worker = WorkerTask::new("prune", Some(worker_id), Userid::root_userid().clone(), true)?;
|
||||||
|
|
||||||
let result = try_block! {
|
if keep_all {
|
||||||
if keep_all {
|
worker.log("No prune selection - keeping all files.");
|
||||||
worker.log("No prune selection - keeping all files.");
|
} else {
|
||||||
} else {
|
worker.log(format!("retention options: {}", prune_options.cli_options_string()));
|
||||||
worker.log(format!("retention options: {}", prune_options.cli_options_string()));
|
worker.log(format!("Starting prune on store \"{}\" group \"{}/{}\"",
|
||||||
worker.log(format!("Starting prune on store \"{}\" group \"{}/{}\"",
|
store, backup_type, backup_id));
|
||||||
store, backup_type, backup_id));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (info, mut keep) in prune_info {
|
for (info, mut keep) in prune_info {
|
||||||
if keep_all { keep = true; }
|
if keep_all { keep = true; }
|
||||||
|
|
||||||
let backup_time = info.backup_dir.backup_time();
|
let backup_time = info.backup_dir.backup_time();
|
||||||
let timestamp = info.backup_dir.backup_time_string();
|
let timestamp = info.backup_dir.backup_time_string();
|
||||||
let group = info.backup_dir.group();
|
let group = info.backup_dir.group();
|
||||||
|
|
||||||
|
|
||||||
let msg = format!(
|
let msg = format!(
|
||||||
"{}/{}/{} {}",
|
"{}/{}/{} {}",
|
||||||
group.backup_type(),
|
group.backup_type(),
|
||||||
group.backup_id(),
|
group.backup_id(),
|
||||||
timestamp,
|
timestamp,
|
||||||
if keep { "keep" } else { "remove" },
|
if keep { "keep" } else { "remove" },
|
||||||
);
|
);
|
||||||
|
|
||||||
worker.log(msg);
|
worker.log(msg);
|
||||||
|
|
||||||
prune_result.push(json!({
|
prune_result.push(json!({
|
||||||
"backup-type": group.backup_type(),
|
"backup-type": group.backup_type(),
|
||||||
"backup-id": group.backup_id(),
|
"backup-id": group.backup_id(),
|
||||||
"backup-time": backup_time,
|
"backup-time": backup_time,
|
||||||
"keep": keep,
|
"keep": keep,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
if !(dry_run || keep) {
|
if !(dry_run || keep) {
|
||||||
datastore.remove_backup_dir(&info.backup_dir, false)?;
|
if let Err(err) = datastore.remove_backup_dir(&info.backup_dir, false) {
|
||||||
|
worker.warn(
|
||||||
|
format!(
|
||||||
|
"failed to remove dir {:?}: {}",
|
||||||
|
info.backup_dir.relative_path(), err
|
||||||
|
)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Ok(())
|
worker.log_result(&Ok(()));
|
||||||
};
|
|
||||||
|
|
||||||
worker.log_result(&result);
|
|
||||||
|
|
||||||
if let Err(err) = result {
|
|
||||||
bail!("prune failed - {}", err);
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(json!(prune_result))
|
Ok(json!(prune_result))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user