From: Dominik Csapak <d.csapak@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH proxmox-backup 08/11] api2/tape/changer: add drive state to changer status output
Date: Thu, 18 Feb 2021 15:40:27 +0100 [thread overview]
Message-ID: <20210218144030.16778-8-d.csapak@proxmox.com> (raw)
In-Reply-To: <20210218144030.16778-1-d.csapak@proxmox.com>
if we can find the drive in the config and it has a state
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
src/api2/tape/changer.rs | 22 ++++++++++++++++++++++
src/api2/types/tape/changer.rs | 3 +++
2 files changed, 25 insertions(+)
diff --git a/src/api2/tape/changer.rs b/src/api2/tape/changer.rs
index dc98d85b..212ca8eb 100644
--- a/src/api2/tape/changer.rs
+++ b/src/api2/tape/changer.rs
@@ -1,3 +1,4 @@
+use std::collections::HashMap;
use std::path::Path;
use anyhow::Error;
@@ -11,6 +12,7 @@ use crate::{
api2::types::{
CHANGER_NAME_SCHEMA,
ChangerListEntry,
+ LinuxTapeDrive,
MtxEntryKind,
MtxStatusEntry,
ScsiTapeChanger,
@@ -25,6 +27,7 @@ use crate::{
ScsiMediaChange,
mtx_status_to_online_set,
},
+ drive::get_tape_device_state,
lookup_device_identification,
},
};
@@ -66,9 +69,26 @@ pub async fn get_status(name: String) -> Result<Vec<MtxStatusEntry>, Error> {
inventory.update_online_status(&map)?;
+ let drive_list: Vec<LinuxTapeDrive> = config.convert_to_typed_array("linux")?;
+ let mut drive_map: HashMap<u64, String> = HashMap::new();
+
+ for drive in drive_list {
+ if let Some(changer) = drive.changer {
+ if changer != name {
+ continue;
+ }
+ let num = drive.changer_drivenum.unwrap_or(0);
+ drive_map.insert(num, drive.name.clone());
+ }
+ }
+
let mut list = Vec::new();
for (id, drive_status) in status.drives.iter().enumerate() {
+ let mut state = None;
+ if let Some(drive) = drive_map.get(&(id as u64)) {
+ state = get_tape_device_state(&config, &drive)?;
+ }
let entry = MtxStatusEntry {
entry_kind: MtxEntryKind::Drive,
entry_id: id as u64,
@@ -78,6 +98,7 @@ pub async fn get_status(name: String) -> Result<Vec<MtxStatusEntry>, Error> {
ElementStatus::VolumeTag(tag) => Some(tag.to_string()),
},
loaded_slot: drive_status.loaded_slot,
+ state,
};
list.push(entry);
}
@@ -96,6 +117,7 @@ pub async fn get_status(name: String) -> Result<Vec<MtxStatusEntry>, Error> {
ElementStatus::VolumeTag(tag) => Some(tag.to_string()),
},
loaded_slot: None,
+ state: None,
};
list.push(entry);
}
diff --git a/src/api2/types/tape/changer.rs b/src/api2/types/tape/changer.rs
index f9d30acd..780bf669 100644
--- a/src/api2/types/tape/changer.rs
+++ b/src/api2/types/tape/changer.rs
@@ -129,4 +129,7 @@ pub struct MtxStatusEntry {
/// The slot the drive was loaded from
#[serde(skip_serializing_if="Option::is_none")]
pub loaded_slot: Option<u64>,
+ /// The current state of the drive
+ #[serde(skip_serializing_if="Option::is_none")]
+ pub state: Option<String>,
}
--
2.20.1
next prev parent reply other threads:[~2021-02-18 14:40 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-18 14:40 [pbs-devel] [PATCH proxmox-backup 01/11] tape/drive: add test_device_path_lock Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 02/11] tape/drive: add get/set status functions Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 03/11] api2/tape/drive: add run_drive_worker wrapper Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 04/11] api2/tape/drive: use 'run_drive_worker' where possible Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 05/11] api2/tape/drive: add wrapper for tokio::task::spawn_blocking Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 06/11] api2/tape/drive: use run_drive_blocking_task where possible Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 07/11] api2/tape/drive: wrap some api calls in run_drive_blocking_task Dominik Csapak
2021-02-18 14:40 ` Dominik Csapak [this message]
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 09/11] api2/tape/{backup, restore}, proxmox-tape: set device state Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 10/11] ui: tape: fix eslint warnings (trailing comma) Dominik Csapak
2021-02-18 14:40 ` [pbs-devel] [PATCH proxmox-backup 11/11] ui: tape/ChangerStatus: show the state of the drive Dominik Csapak
2021-02-18 15:06 ` Dominik Csapak
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210218144030.16778-8-d.csapak@proxmox.com \
--to=d.csapak@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox