From 926d05ef0b4f64f45b6e3d7ec03fc2f4398f9889 Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Thu, 18 Feb 2021 15:40:28 +0100 Subject: [PATCH] api2/tape/{backup, restore}, proxmox-tape: set device state set the drive device state everywhere we lock it, so that we know what it currently does Signed-off-by: Dominik Csapak --- src/api2/tape/backup.rs | 13 +++++++++++++ src/api2/tape/restore.rs | 13 +++++++++++++ src/bin/proxmox-tape.rs | 3 +++ 3 files changed, 29 insertions(+) diff --git a/src/api2/tape/backup.rs b/src/api2/tape/backup.rs index f10a71e3..87f0dd5b 100644 --- a/src/api2/tape/backup.rs +++ b/src/api2/tape/backup.rs @@ -54,6 +54,7 @@ use crate::{ drive::{ media_changer, lock_tape_device, + set_tape_device_state, }, changer::update_changer_online_status, }, @@ -139,6 +140,7 @@ pub fn do_tape_backup_job( move |worker| { let _drive_lock = drive_lock; // keep lock guard + set_tape_device_state(&tape_job.drive, &worker.upid().to_string())?; job.start(&worker.upid().to_string())?; let eject_media = false; @@ -168,6 +170,14 @@ pub fn do_tape_backup_job( ); } + if let Err(err) = set_tape_device_state(&tape_job.drive, "") { + eprintln!( + "could not unset drive state for {}: {}", + tape_job.drive, + err + ); + } + job_result } )?; @@ -265,7 +275,10 @@ pub fn backup( to_stdout, move |worker| { let _drive_lock = drive_lock; // keep lock guard + set_tape_device_state(&drive, &worker.upid().to_string())?; backup_worker(&worker, datastore, &drive, &pool_config, eject_media, export_media_set)?; + // ignore errors + let _ = set_tape_device_state(&drive, ""); Ok(()) } )?; diff --git a/src/api2/tape/restore.rs b/src/api2/tape/restore.rs index 498b49df..707b8f36 100644 --- a/src/api2/tape/restore.rs +++ b/src/api2/tape/restore.rs @@ -69,6 +69,7 @@ use crate::{ TapeDriver, request_and_load_media, lock_tape_device, + set_tape_device_state, }, }, }; @@ -134,6 +135,8 @@ pub fn restore( move |worker| { let _drive_lock = drive_lock; // keep lock guard + set_tape_device_state(&drive, &worker.upid().to_string())?; + let _lock = MediaPool::lock(status_path, &pool)?; let members = inventory.compute_media_set_members(&media_set_uuid)?; @@ -189,6 +192,16 @@ pub fn restore( } task_log!(worker, "Restore mediaset '{}' done", media_set); + + if let Err(err) = set_tape_device_state(&drive, "") { + task_log!( + worker, + "could not unset drive state for {}: {}", + drive, + err + ); + } + Ok(()) } )?; diff --git a/src/bin/proxmox-tape.rs b/src/bin/proxmox-tape.rs index eb792986..74b9c128 100644 --- a/src/bin/proxmox-tape.rs +++ b/src/bin/proxmox-tape.rs @@ -43,6 +43,7 @@ use proxmox_backup::{ drive::{ open_drive, lock_tape_device, + set_tape_device_state, }, complete_media_label_text, complete_media_set_uuid, @@ -543,6 +544,7 @@ fn move_to_eom(mut param: Value) -> Result<(), Error> { let drive = extract_drive_name(&mut param, &config)?; let _lock = lock_tape_device(&config, &drive)?; + set_tape_device_state(&drive, "moving to eom")?; let mut drive = open_drive(&config, &drive)?; @@ -572,6 +574,7 @@ fn debug_scan(mut param: Value) -> Result<(), Error> { let drive = extract_drive_name(&mut param, &config)?; let _lock = lock_tape_device(&config, &drive)?; + set_tape_device_state(&drive, "debug scan")?; let mut drive = open_drive(&config, &drive)?;