From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 2F0386B395 for ; Thu, 18 Feb 2021 15:40:36 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AA4CFF6FF for ; Thu, 18 Feb 2021 15:40:35 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [212.186.127.180]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 8915DF68C for ; Thu, 18 Feb 2021 15:40:33 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 5056F41FCC for ; Thu, 18 Feb 2021 15:40:33 +0100 (CET) From: Dominik Csapak To: pbs-devel@lists.proxmox.com Date: Thu, 18 Feb 2021 15:40:28 +0100 Message-Id: <20210218144030.16778-9-d.csapak@proxmox.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210218144030.16778-1-d.csapak@proxmox.com> References: <20210218144030.16778-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.215 Adjusted score from AWL reputation of From: address KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: [pbs-devel] [PATCH proxmox-backup 09/11] api2/tape/{backup, restore}, proxmox-tape: set device state X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 18 Feb 2021 14:40:36 -0000 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 522b4097..a9c54e7d 100644 --- a/src/api2/tape/backup.rs +++ b/src/api2/tape/backup.rs @@ -45,6 +45,7 @@ use crate::{ drive::{ media_changer, lock_tape_device, + set_tape_device_state, }, changer::update_changer_online_status, }, @@ -90,6 +91,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; @@ -119,6 +121,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 } )?; @@ -216,7 +226,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)?; -- 2.20.1