[pbs-devel] [PATCH v1 proxmox-backup] add benchmark flag to backup creation for proper cleanup when running a benchmark
Hannes Laimer
h.laimer at proxmox.com
Wed Sep 2 11:41:22 CEST 2020
Signed-off-by: Hannes Laimer <h.laimer at proxmox.com>
---
v1:
- set worker_type to 'benchmark', if it is one
- delete whole '<datastore>/host/benchmark'-folder after benchmark
- add optional boolean parameter 'benchmark' to backup endpoint
- add backup boolean parameter to BackupWriter start() function
src/api2/backup.rs | 18 ++++++++++++++----
src/bin/proxmox-backup-client.rs | 1 +
src/bin/proxmox_backup_client/benchmark.rs | 1 +
src/client/backup_writer.rs | 4 +++-
4 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/api2/backup.rs b/src/api2/backup.rs
index ad608d85..0edc9240 100644
--- a/src/api2/backup.rs
+++ b/src/api2/backup.rs
@@ -38,6 +38,7 @@ pub const API_METHOD_UPGRADE_BACKUP: ApiMethod = ApiMethod::new(
("backup-id", false, &BACKUP_ID_SCHEMA),
("backup-time", false, &BACKUP_TIME_SCHEMA),
("debug", true, &BooleanSchema::new("Enable verbose debug logging.").schema()),
+ ("benchmark", true, &BooleanSchema::new("Is a benchmark.").schema()),
]),
)
).access(
@@ -56,6 +57,7 @@ fn upgrade_to_backup_protocol(
async move {
let debug = param["debug"].as_bool().unwrap_or(false);
+ let benchmark = param["benchmark"].as_bool().unwrap_or(false);
let userid: Userid = rpcenv.get_user().unwrap().parse()?;
@@ -115,15 +117,19 @@ async move {
let (path, is_new, _snap_guard) = datastore.create_locked_backup_dir(&backup_dir)?;
if !is_new { bail!("backup directory already exists."); }
-
- WorkerTask::spawn("backup", Some(worker_id), userid.clone(), true, move |worker| {
+ let absolute_backup_dir_path = format!("{}/{}", &datastore.base_path().to_str().unwrap(), backup_group);
+ let mut worker_type = "backup";
+ if benchmark {
+ worker_type = "benchmark";
+ }
+ WorkerTask::spawn(worker_type, Some(worker_id), userid.clone(), true, move |worker| {
let mut env = BackupEnvironment::new(
env_type, userid, worker.clone(), datastore, backup_dir);
env.debug = debug;
env.last_backup = last_backup;
- env.log(format!("starting new backup on datastore '{}': {:?}", store, path));
+ env.log(format!("starting new {} on datastore '{}': {:?}", worker_type, store, path));
let service = H2Service::new(env.clone(), worker.clone(), &BACKUP_API_ROUTER, debug);
@@ -160,7 +166,11 @@ async move {
req = req_fut => req,
abrt = abort_future => abrt,
};
-
+ if benchmark {
+ env.log("benchmark finished successfully");
+ std::fs::remove_dir_all(absolute_backup_dir_path)?;
+ return Ok(());
+ }
match (res, env.ensure_finished()) {
(Ok(_), Ok(())) => {
env.log("backup finished successfully");
diff --git a/src/bin/proxmox-backup-client.rs b/src/bin/proxmox-backup-client.rs
index 9a6f309d..1e9cc680 100644
--- a/src/bin/proxmox-backup-client.rs
+++ b/src/bin/proxmox-backup-client.rs
@@ -1026,6 +1026,7 @@ async fn create_backup(
&backup_id,
backup_time,
verbose,
+ false
).await?;
let previous_manifest = if let Ok(previous_manifest) = client.download_previous_manifest().await {
diff --git a/src/bin/proxmox_backup_client/benchmark.rs b/src/bin/proxmox_backup_client/benchmark.rs
index 9355d39e..b7c67e7f 100644
--- a/src/bin/proxmox_backup_client/benchmark.rs
+++ b/src/bin/proxmox_backup_client/benchmark.rs
@@ -226,6 +226,7 @@ async fn test_upload_speed(
"benchmark",
backup_time,
false,
+ true
).await?;
if verbose { eprintln!("Start TLS speed test"); }
diff --git a/src/client/backup_writer.rs b/src/client/backup_writer.rs
index 35e9c0bd..64c3cf27 100644
--- a/src/client/backup_writer.rs
+++ b/src/client/backup_writer.rs
@@ -53,6 +53,7 @@ impl BackupWriter {
backup_id: &str,
backup_time: DateTime<Utc>,
debug: bool,
+ benchmark: bool
) -> Result<Arc<BackupWriter>, Error> {
let param = json!({
@@ -60,7 +61,8 @@ impl BackupWriter {
"backup-id": backup_id,
"backup-time": backup_time.timestamp(),
"store": datastore,
- "debug": debug
+ "debug": debug,
+ "benchmark": benchmark
});
let req = HttpClient::request_builder(
--
2.20.1
More information about the pbs-devel
mailing list