[pbs-devel] [PATCH proxmox-backup 1/2] tape: changer: save whole LtoTapeDrive config in MtxMediaChanger

Dominik Csapak d.csapak at proxmox.com
Thu Dec 7 13:51:01 CET 2023


we'll need more info from there in the future, so derive clone for it
and save the whole config instead of adding an additional field.

Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
 pbs-api-types/src/tape/drive.rs |  2 +-
 src/tape/changer/mod.rs         | 14 ++++++--------
 2 files changed, 7 insertions(+), 9 deletions(-)

diff --git a/pbs-api-types/src/tape/drive.rs b/pbs-api-types/src/tape/drive.rs
index ea2cbbd8..ec7c8395 100644
--- a/pbs-api-types/src/tape/drive.rs
+++ b/pbs-api-types/src/tape/drive.rs
@@ -59,7 +59,7 @@ pub struct VirtualTapeDrive {
         },
     }
 )]
-#[derive(Serialize, Deserialize, Updater)]
+#[derive(Serialize, Deserialize, Updater, Clone)]
 #[serde(rename_all = "kebab-case")]
 /// Lto SCSI tape driver
 pub struct LtoTapeDrive {
diff --git a/src/tape/changer/mod.rs b/src/tape/changer/mod.rs
index 0cb42486..bf0a15f4 100644
--- a/src/tape/changer/mod.rs
+++ b/src/tape/changer/mod.rs
@@ -384,8 +384,7 @@ fn load_changer_state_cache(changer: &str) -> Result<Option<MtxStatus>, Error> {
 
 /// Implements MediaChange using 'mtx' linux cli tool
 pub struct MtxMediaChanger {
-    drive_name: String, // used for error messages
-    drive_number: u64,
+    drive: LtoTapeDrive,
     config: ScsiTapeChanger,
 }
 
@@ -398,8 +397,7 @@ impl MtxMediaChanger {
         };
 
         Ok(Self {
-            drive_name: drive_config.name.clone(),
-            drive_number: drive_config.changer_drivenum.unwrap_or(0),
+            drive: drive_config.clone(),
             config: changer_config,
         })
     }
@@ -407,11 +405,11 @@ impl MtxMediaChanger {
 
 impl MediaChange for MtxMediaChanger {
     fn drive_number(&self) -> u64 {
-        self.drive_number
+        self.drive.changer_drivenum.unwrap_or(0)
     }
 
     fn drive_name(&self) -> &str {
-        &self.drive_name
+        &self.drive.name
     }
 
     fn status(&mut self) -> Result<MtxStatus, Error> {
@@ -423,12 +421,12 @@ impl MediaChange for MtxMediaChanger {
     }
 
     fn load_media_from_slot(&mut self, slot: u64) -> Result<MtxStatus, Error> {
-        self.config.load_slot(slot, self.drive_number)
+        self.config.load_slot(slot, self.drive_number())
     }
 
     fn unload_media(&mut self, target_slot: Option<u64>) -> Result<MtxStatus, Error> {
         if let Some(target_slot) = target_slot {
-            self.config.unload(target_slot, self.drive_number)
+            self.config.unload(target_slot, self.drive_number())
         } else {
             let status = self.status()?;
             self.unload_to_free_slot(status)
-- 
2.39.2




More information about the pbs-devel mailing list