tape: update changer status cache after load/unload

This commit is contained in:
Dietmar Maurer 2021-02-20 09:06:17 +01:00
parent cd44fb8d84
commit cbd9899389
3 changed files with 26 additions and 3 deletions

View File

@ -162,7 +162,9 @@ pub async fn transfer(
let mut changer_config: ScsiTapeChanger = config.lookup("changer", &name)?; let mut changer_config: ScsiTapeChanger = config.lookup("changer", &name)?;
tokio::task::spawn_blocking(move || { tokio::task::spawn_blocking(move || {
changer_config.transfer(from, to) changer_config.transfer(from, to)?;
let _ = changer_config.status(false); // update status cache
Ok(())
}).await? }).await?
} }

View File

@ -156,6 +156,8 @@ pub fn load_media(
let (mut changer, _) = required_media_changer(&config, &drive)?; let (mut changer, _) = required_media_changer(&config, &drive)?;
changer.load_media(&label_text)?; changer.load_media(&label_text)?;
let _ = changer.status(); // update status cache
Ok(()) Ok(())
}, },
)?; )?;
@ -261,6 +263,9 @@ pub fn unload(
let (mut changer, _) = required_media_changer(&config, &drive)?; let (mut changer, _) = required_media_changer(&config, &drive)?;
changer.unload_media(target_slot)?; changer.unload_media(target_slot)?;
let _ = changer.status(); // update status cache
Ok(()) Ok(())
}, },
)?; )?;
@ -419,6 +424,7 @@ pub fn eject_media(
move |_worker, config| { move |_worker, config| {
if let Some((mut changer, _)) = media_changer(&config, &drive)? { if let Some((mut changer, _)) = media_changer(&config, &drive)? {
changer.unload_media(None)?; changer.unload_media(None)?;
let _ = changer.status(); // update status cache
} else { } else {
let mut drive = open_drive(&config, &drive)?; let mut drive = open_drive(&config, &drive)?;
drive.eject_media()?; drive.eject_media()?;
@ -861,6 +867,8 @@ pub fn update_inventory(
continue; continue;
} }
let _ = changer.status(); // update status cache
let mut drive = open_drive(&config, &drive)?; let mut drive = open_drive(&config, &drive)?;
match drive.read_label() { match drive.read_label() {
Err(err) => { Err(err) => {
@ -879,6 +887,7 @@ pub fn update_inventory(
} }
} }
changer.unload_media(None)?; changer.unload_media(None)?;
let _ = changer.status(); // update status cache
} }
Ok(()) Ok(())
}, },

View File

@ -395,7 +395,15 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
}).show(); }).show();
}, },
reload: async function() { reload: function() {
this.reload_full(true);
},
reload_no_cache: function() {
this.reload_full(false);
},
reload_full: async function(use_cache) {
let me = this; let me = this;
let view = me.getView(); let view = me.getView();
let vm = me.getViewModel(); let vm = me.getViewModel();
@ -409,7 +417,11 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
Proxmox.Utils.setErrorMask(me.lookup('content')); Proxmox.Utils.setErrorMask(me.lookup('content'));
let status_fut = PBS.Async.api2({ let status_fut = PBS.Async.api2({
timeout: 5*60*1000, timeout: 5*60*1000,
method: 'GET',
url: `/api2/extjs/tape/changer/${encodeURIComponent(changer)}/status`, url: `/api2/extjs/tape/changer/${encodeURIComponent(changer)}/status`,
params: {
cache: use_cache,
},
}); });
let drives_fut = PBS.Async.api2({ let drives_fut = PBS.Async.api2({
timeout: 5*60*1000, timeout: 5*60*1000,
@ -554,7 +566,7 @@ Ext.define('PBS.TapeManagement.ChangerStatus', {
{ {
text: gettext('Reload'), text: gettext('Reload'),
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
handler: 'reload', handler: 'reload_no_cache',
selModel: false, selModel: false,
}, },
'-', '-',