Francesco Romani has uploaded a new change for review.
Change subject: recovery: split long recovery function
......................................................................
recovery: split long recovery function
Split the long recovery function in clientif in subfunctions,
one for each recovery stage.
No planned change in functionality.
Change-Id: I28350d4c41a93265b8e8045cf51b004179587bf9
Signed-off-by: Francesco Romani <fromani(a)redhat.com>
---
M vdsm/clientIF.py
1 file changed, 39 insertions(+), 30 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/88/45288/1
diff --git a/vdsm/clientIF.py b/vdsm/clientIF.py
index 1c961ac..fb68f80 100644
--- a/vdsm/clientIF.py
+++ b/vdsm/clientIF.py
@@ -469,16 +469,7 @@
recovery.all_vms(self)
# recover stage 3: waiting for domains to go up
- while self._enabled:
- launching = sum(int(v.lastStatus == vmstatus.WAIT_FOR_LAUNCH)
- for v in self.vmContainer.values())
- if not launching:
- break
- else:
- self.log.info(
- 'recovery: waiting for %d domains to go up',
- launching)
- time.sleep(1)
+ self._waitForDomainsUp()
recovery.clean_vm_files(self)
@@ -488,27 +479,9 @@
# and then prepare all volumes.
# Actually, we need it just to get the resources for future
# volumes manipulations
- while self._enabled and self.vmContainer and \
- not self.irs.getConnectedStoragePoolsList()['poollist']:
- self.log.info('recovery: waiting for storage pool to go up')
- time.sleep(5)
+ self._waitForStoragePool()
- vm_objects = self.vmContainer.values()
- num_vm_objects = len(vm_objects)
- for idx, vm_obj in enumerate(vm_objects):
- # Let's recover as much VMs as possible
- try:
- # Do not prepare volumes when system goes down
- if self._enabled:
- self.log.info(
- 'recovery [%d/%d]: preparing paths for'
- ' domain %s', idx+1, num_vm_objects, vm_obj.id)
- vm_obj.preparePaths(
- vm_obj.devSpecMapFromConf()[hwclass.DISK])
- except:
- self.log.exception(
- "recovery [%d/%d]: failed for vm %s",
- idx+1, num_vm_objects, vm_obj.id)
+ self._preparePathsForRecoveredVMs()
self.log.info('recovery: completed in %is',
utils.monotonic_time() - start_time)
@@ -558,3 +531,39 @@
except:
self.log.error("Error running VM callback", exc_info=True)
+
+ def _waitForDomainsUp(self):
+ while self._enabled:
+ launching = sum(int(v.lastStatus == vmstatus.WAIT_FOR_LAUNCH)
+ for v in self.vmContainer.values())
+ if not launching:
+ break
+ else:
+ self.log.info(
+ 'recovery: waiting for %d domains to go up',
+ launching)
+ time.sleep(1)
+
+ def _waitForStoragePool(self):
+ while (self._enabled and self.vmContainer and
+ not self.irs.getConnectedStoragePoolsList()['poollist']):
+ self.log.info('recovery: waiting for storage pool to go up')
+ time.sleep(5)
+
+ def _preparePathsForRecoveredVMs(self):
+ vm_objects = self.vmContainer.values()
+ num_vm_objects = len(vm_objects)
+ for idx, vm_obj in enumerate(vm_objects):
+ # Let's recover as much VMs as possible
+ try:
+ # Do not prepare volumes when system goes down
+ if self._enabled:
+ self.log.info(
+ 'recovery [%d/%d]: preparing paths for'
+ ' domain %s', idx+1, num_vm_objects, vm_obj.id)
+ vm_obj.preparePaths(
+ vm_obj.devSpecMapFromConf()[hwclass.DISK])
+ except:
+ self.log.exception(
+ "recovery [%d/%d]: failed for vm %s",
+ idx+1, num_vm_objects, vm_obj.id)
--
To view, visit
https://gerrit.ovirt.org/45288
To unsubscribe, visit
https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I28350d4c41a93265b8e8045cf51b004179587bf9
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Francesco Romani <fromani(a)redhat.com>