Reviewed-By: Ramon Medeiros <ramonn(a)br.ibm.com>
On 05/29/2016 08:12 PM, Rodrigo Trujillo wrote:
Kimchi is able to detect and continue running if libvirt stops and
back.
However if libvirt is not up and host admin tries to start Wok, Kimchi
is going to crash in feature tests and when loads models.
This patch fixes this issues, then Wok does not break and is able to
load and start Kimchi. When libivirt service is back, Kimchi is able to
run feature tests and set the capabilities again, restoring all
features.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo(a)linux.vnet.ibm.com>
---
model/config.py | 17 ++++++++++++++---
model/networks.py | 5 +++--
model/storagepools.py | 5 +++--
model/storagevolumes.py | 7 ++++++-
4 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/model/config.py b/model/config.py
index 36fce74..fc4b285 100644
--- a/model/config.py
+++ b/model/config.py
@@ -89,6 +89,10 @@ class CapabilitiesModel(object):
def _set_depend_capabilities(self):
wok_log.info("\n*** Kimchi: Running dependable feature tests ***")
conn = self.conn.get()
+ if conn is None:
+ wok_log.info("*** Kimchi: Dependable feature tests not completed
"
+ "***\n")
+ return
self.qemu_stream = FeatureTests.qemu_supports_iso_stream()
msg = "QEMU stream support .......: %s"
wok_log.info(msg % str(self.qemu_stream))
@@ -104,6 +108,12 @@ class CapabilitiesModel(object):
def _set_capabilities(self):
wok_log.info("\n*** Kimchi: Running feature tests ***")
+ self.libvirtd_running = is_libvirtd_up()
+ msg = "Service Libvirtd running ...: %s"
+ wok_log.info(msg % str(self.libvirtd_running))
+ if self.libvirtd_running == False:
+ wok_log.info("*** Kimchi: Feature tests not completed ***\n")
+ return
conn = self.conn.get()
self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe(conn)
msg = "NFS Target Probe support ...: %s"
@@ -120,9 +130,6 @@ class CapabilitiesModel(object):
self.mem_hotplug_support = FeatureTests.has_mem_hotplug_support(conn)
msg = "Memory Hotplug support .....: %s"
wok_log.info(msg % str(self.mem_hotplug_support))
- self.libvirtd_running = is_libvirtd_up()
- msg = "Service Libvirtd running ...: %s"
- wok_log.info(msg % str(self.libvirtd_running))
wok_log.info("*** Kimchi: Feature tests completed ***\n")
_set_capabilities.priority = 90
@@ -148,6 +155,10 @@ class CapabilitiesModel(object):
'nm_running': FeatureTests.is_nm_running(),
'mem_hotplug_support': False,
'libvirtd_running': False}
+ elif self.libvirtd_running == False:
+ # Libvirt returned, run tests again
+ self._set_capabilities()
+ self._set_depend_capabilities()
return {'libvirt_stream_protocols': self.libvirt_stream_protocols,
'qemu_spice': self._qemu_support_spice(),
diff --git a/model/networks.py b/model/networks.py
index e04c8e4..3b2a9e2 100644
--- a/model/networks.py
+++ b/model/networks.py
@@ -49,8 +49,9 @@ KIMCHI_BRIDGE_PREFIX = 'kb'
class NetworksModel(object):
def __init__(self, **kargs):
self.conn = kargs['conn']
- if self.conn.isQemuURI():
- self._check_default_networks()
+ if self.conn.get() is not None:
+ if self.conn.isQemuURI():
+ self._check_default_networks()
self.caps = CapabilitiesModel(**kargs)
diff --git a/model/storagepools.py b/model/storagepools.py
index be06988..3f6a734 100644
--- a/model/storagepools.py
+++ b/model/storagepools.py
@@ -65,8 +65,9 @@ class StoragePoolsModel(object):
self.caps = CapabilitiesModel(**kargs)
self.device = DeviceModel(**kargs)
- if self.conn.isQemuURI():
- self._check_default_pools()
+ if self.conn.get() is not None:
+ if self.conn.isQemuURI():
+ self._check_default_pools()
def _check_default_pools(self):
pools = {}
diff --git a/model/storagevolumes.py b/model/storagevolumes.py
index da42e85..70cad4f 100644
--- a/model/storagevolumes.py
+++ b/model/storagevolumes.py
@@ -275,7 +275,10 @@ class StorageVolumeModel(object):
self.task = TaskModel(**kargs)
self.storagevolumes = StorageVolumesModel(**kargs)
self.storagepool = StoragePoolModel(**kargs)
- self.libvirt_user = UserTests().probe_user()
+ if self.conn.get() is not None:
+ self.libvirt_user = UserTests().probe_user()
+ else:
+ self.libvirt_user = None
@staticmethod
def get_storagevolume(poolname, name, conn):
@@ -332,6 +335,8 @@ class StorageVolumeModel(object):
isvalid = False
used_by = get_disk_used_by(self.objstore, self.conn, path)
+ if (self.libvirt_user is None):
+ self.libvirt_user = UserTests().probe_user()
ret, _ = probe_file_permission_as_user(path, self.libvirt_user)
res = dict(type=VOLUME_TYPE_MAP[info[0]],
capacity=info[1],
--
Ramon Nunes Medeiros
Kimchi Developer
Linux Technology Center Brazil
IBM Systems & Technology Group
Phone : +55 19 2132 7878
ramonn(a)br.ibm.com