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)?;
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 {
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)?;
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]
+ }
}
// 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());
}
}
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())),
}
}
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,
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());
}
}
.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 {
.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 {
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 {