Nir Soffer has uploaded a new change for review. Change subject: bootstrap: Return recovery error during lvm bootstrap ......................................................................
bootstrap: Return recovery error during lvm bootstrap Since lvm bootstrap is performed in a background thread, it may not be done when vdsm is asked to connect to stoarge pool or manipulate images. This may lead to a race when lvm bootstrap thread is deactivating a logical volume after engine asked to activate it. This patch use the recovery mechanisim to respond with a recovery error until lvm bootstrap is done, keeping backward compatibility with old clients. Before this patch, lvm bootstrap was avoiding such races for special logical volumes by refrshing instead of deactivating. This may not be needed any more, and may be removed in future patch. Change-Id: Id74468917c5b7c05d4183854e2f1255de98325dc Signed-off-by: Nir Soffer <[email protected]> --- M vdsm/BindingXMLRPC.py M vdsm/clientIF.py M vdsm/storage/hsm.py 3 files changed, 17 insertions(+), 4 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/30/21530/1 diff --git a/vdsm/BindingXMLRPC.py b/vdsm/BindingXMLRPC.py index fcd3221..c195219 100644 --- a/vdsm/BindingXMLRPC.py +++ b/vdsm/BindingXMLRPC.py @@ -984,10 +984,10 @@ # Ready to show the log into vdsm.log f.im_self.log.log(logLevel, logStr) - if f.im_self.cif._recovery: - res = errCode['recovery'] - else: + if f.im_self.cif.ready: res = f(*args, **kwargs) + else: + res = errCode['recovery'] f.im_self.cif.log.log(logLevel, 'return %s with %s', f.__name__, res) return res diff --git a/vdsm/clientIF.py b/vdsm/clientIF.py index 0b67e45..ac548a8 100644 --- a/vdsm/clientIF.py +++ b/vdsm/clientIF.py @@ -107,6 +107,10 @@ raise self._prepareBindings() + @property + def ready(self): + return (self.irs is None or self.irs.ready) and not self._recovery + def contEIOVms(self, sdUUID, isDomainStateValid): # This method is called everytime the onDomainStateChange # event is emitted, this event is emitted even when a domain goes diff --git a/vdsm/storage/hsm.py b/vdsm/storage/hsm.py index c8af8b1..2fbc086 100644 --- a/vdsm/storage/hsm.py +++ b/vdsm/storage/hsm.py @@ -329,6 +329,7 @@ for this thread :type defExcFun: function """ + self._ready = False rm.ResourceManager.getInstance().registerNamespace( STORAGE, rm.SimpleResourceFactory()) self.storage_repository = config.get('irs', 'repository') @@ -374,7 +375,11 @@ self.log.warn("Failed to clean Storage Repository.", exc_info=True) def storageRefresh(): - lvm.bootstrap(refreshlvs=blockSD.SPECIAL_LVS) + try: + lvm.bootstrap(blockSD.SPECIAL_LVS) + finally: + self._ready = True + sdCache.refreshStorage() fileUtils.createdir(self.tasksDir) @@ -405,6 +410,10 @@ monitorInterval = config.getint('irs', 'sd_health_check_delay') self.domainMonitor = domainMonitor.DomainMonitor(monitorInterval) + @property + def ready(self): + return self._ready + @public def registerDomainStateChangeCallback(self, callbackFunc): """ -- To view, visit http://gerrit.ovirt.org/21530 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id74468917c5b7c05d4183854e2f1255de98325dc Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Nir Soffer <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
