diff --git a/src/api2/tape/drive.rs b/src/api2/tape/drive.rs index 107bcfd8..2175a460 100644 --- a/src/api2/tape/drive.rs +++ b/src/api2/tape/drive.rs @@ -528,7 +528,7 @@ fn write_media_label( label.label_text, pool ); - let set = MediaSetLabel::with_data(pool, [0u8; 16].into(), 0, label.ctime, None); + let set = MediaSetLabel::new_unassigned(pool, label.ctime); drive.write_media_set_label(&set, None)?; @@ -575,7 +575,7 @@ fn write_media_label( if let Some(ref pool) = pool { match info.media_set_label { Some(set) => { - if set.uuid != [0u8; 16].into() { + if !set.unassigned() { bail!("verify media set label failed - got wrong set uuid"); } if &set.pool != pool { @@ -1301,7 +1301,7 @@ pub fn catalog_media( return Ok(()); } Some(ref set) => { - if set.uuid.as_ref() == [0u8; 16] { + if set.unassigned() { // media is empty task_log!(worker, "media is empty"); let _lock = lock_unassigned_media_pool(TAPE_STATUS_DIR)?; diff --git a/src/api2/tape/media.rs b/src/api2/tape/media.rs index ed0105b0..cdeffd5b 100644 --- a/src/api2/tape/media.rs +++ b/src/api2/tape/media.rs @@ -336,8 +336,7 @@ pub fn destroy_media(label_text: String, force: Option) -> Result<(), Erro if !force { if let Some(ref set) = media_id.media_set_label { - let is_empty = set.uuid.as_ref() == [0u8; 16]; - if !is_empty { + if !set.unassigned() { bail!( "media '{}' contains data (please use 'force' flag to remove.", label_text diff --git a/src/tape/file_formats/mod.rs b/src/tape/file_formats/mod.rs index 2b7c9866..f80e2d90 100644 --- a/src/tape/file_formats/mod.rs +++ b/src/tape/file_formats/mod.rs @@ -168,4 +168,12 @@ impl MediaSetLabel { encryption_key_fingerprint, } } + + pub fn new_unassigned(pool: &str, ctime: i64) -> Self { + Self::with_data(pool, [0u8; 16].into(), 0, ctime, None) + } + + pub fn unassigned(&self) -> bool { + self.uuid.as_ref() == [0u8; 16] + } } diff --git a/src/tape/inventory.rs b/src/tape/inventory.rs index 9c5887d7..dd560179 100644 --- a/src/tape/inventory.rs +++ b/src/tape/inventory.rs @@ -185,7 +185,7 @@ impl Inventory { // do not overwrite unsaved pool assignments if media_id.media_set_label.is_none() { if let Some(ref set) = previous.id.media_set_label { - if set.uuid.as_ref() == [0u8; 16] { + if set.unassigned() { media_id.media_set_label = Some(set.clone()); } } @@ -251,15 +251,11 @@ impl Inventory { pub fn lookup_media_pool(&self, uuid: &Uuid) -> Option<(&str, bool)> { match self.map.get(uuid) { None => None, - Some(entry) => { - match entry.id.media_set_label { - None => None, // not assigned to any pool - Some(ref set) => { - let is_empty = set.uuid.as_ref() == [0u8; 16]; - Some((&set.pool, is_empty)) - } - } - } + Some(entry) => entry + .id + .media_set_label + .as_ref() + .map(|set| (set.pool.as_str(), set.unassigned())), } } @@ -275,7 +271,7 @@ impl Inventory { continue; // belong to another pool } - if set.uuid.as_ref() == [0u8; 16] { + if set.unassigned() { list.push(MediaId { label: entry.id.label.clone(), media_set_label: None, @@ -298,7 +294,7 @@ impl Inventory { match entry.id.media_set_label { None => continue, // not assigned to any pool Some(ref set) => { - if set.uuid.as_ref() != [0u8; 16] { + if set.unassigned() { list.push(entry.id.clone()); } } @@ -410,7 +406,7 @@ impl Inventory { .map .values() .filter_map(|entry| entry.id.media_set_label.as_ref()) - .filter(|set| set.pool == pool && set.uuid.as_ref() != [0u8; 16]); + .filter(|set| set.pool == pool && !set.unassigned()); for set in set_list { match last_set { @@ -435,7 +431,7 @@ impl Inventory { .map .values() .filter_map(|entry| entry.id.media_set_label.as_ref()) - .filter(|set| set.pool == pool && set.uuid.as_ref() != [0u8; 16]); + .filter(|set| set.pool == pool && !set.unassigned()); for set in set_list { if set.uuid != uuid && set.ctime >= ctime { @@ -600,7 +596,7 @@ impl Inventory { let uuid = label.uuid.clone(); - let set = MediaSetLabel::with_data(pool, [0u8; 16].into(), 0, ctime, None); + let set = MediaSetLabel::new_unassigned(pool, ctime); self.store( MediaId { diff --git a/src/tape/media_pool.rs b/src/tape/media_pool.rs index eb477885..e1bba9ab 100644 --- a/src/tape/media_pool.rs +++ b/src/tape/media_pool.rs @@ -181,7 +181,7 @@ impl MediaPool { // should never trigger return (MediaStatus::Unknown, location); // belong to another pool } - if set.uuid.as_ref() == [0u8; 16] { + if set.unassigned() { // not assigned to any pool return (MediaStatus::Writable, location); }