Reviewed-by: Royce Lv<lvroyce(a)linux.vnet.ibm.com>
On 2014年12月05日 04:12, Christy Perez wrote:
If a pool happens to be busy at the time the pool.refresh() is
called, then libvirt will throw an error: "internal error:
pool 'default' has asynchronous jobs running." Currently, kimchi
rasise an exception and no pools' storage volumes are listed.
This patch returns a 0 for that particular pool, and allows
the user to continue to request information for other pools.
Without this patch, nothing is shown at all on the Storage tab
if one pool is busy.
In the future, we can check for VIR_ERR_RESOURCE_BUSY and
come up with a plan that works with the UI to display "Busy"
for a pool. But for now, this works around the issue.
v1 -> v2:
- Log exception message and error code
Signed-off-by: Christy Perez <christy(a)linux.vnet.ibm.com>
---
src/kimchi/model/storagepools.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/src/kimchi/model/storagepools.py b/src/kimchi/model/storagepools.py
index 20c9e5a..e03c6bb 100644
--- a/src/kimchi/model/storagepools.py
+++ b/src/kimchi/model/storagepools.py
@@ -202,6 +202,15 @@ def _get_storagepool_vols_num(self, pool):
else:
return 0
except libvirt.libvirtError as e:
+ # If something (say a busy pool) prevents the refresh,
+ # throwing an Exception here would prevent all pools from
+ # displaying information -- so return None for busy
+ kimchi_log.error("ERROR: Storage Pool get vol count: %s "
+ % e.get_error_message())
+ kimchi_log.error("ERROR: Storage Pool get vol count error no: %s
"
+ % e.get_error_code())
+ return 0
+ except Exception as e:
raise OperationFailed("KCHPOOL0008E",
{'name': pool.name(),
'err': e.get_error_message()})