def _recoverExistingVms(self): start_time = utils.monotonic_time() try: self.log.debug('recovery: started') # Starting up libvirt might take long when host under high load, # we prefer running this code in external thread to avoid blocking # API response. mog = min(config.getint('vars', 'max_outgoing_migrations'), numa.cpu_topology().cores) migration.SourceThread.ongoingMigrations.bound = mog recovery.all_domains(self) # recover stage 3: waiting for domains to go up self._waitForDomainsUp() recovery.clean_vm_files(self) self._recovery = False # Now if we have VMs to restore we should wait pool connection # and then prepare all volumes. # Actually, we need it just to get the resources for future # volumes manipulations self._waitForStoragePool() self._preparePathsForRecoveredVMs() self.log.info('recovery: completed in %is', utils.monotonic_time() - start_time) except: self.log.exception("recovery: failed") raise
def test_without_any_vms(self): with namedTemporaryDir() as tmpdir: with MonkeyPatchScope([ (constants, 'P_VDSM_RUN', tmpdir + '/'), (recovery, '_list_domains', lambda: []), (containersconnection, 'recovery', lambda: []), ]): fakecif = fake.ClientIF() recovery.all_domains(fakecif) self.assertEqual(fakecif.vmContainer, {})