xend: Time-out if guest fails to suspend

If a guest fails to re-write control/shutdown node within a minute,
fail the suspend operation.

Signed-off-by: John Levon <john.levon@sun.com>
This commit is contained in:
Keir Fraser committed 2009-03-12 11:00:52 +00:00
1 parent f87a6848fc
commit e36d0b0d06
2 files changed
+26 -1

No files matched your search

+1 -1
View File
@@ -114,7 +114,7 @@ def save(fd, dominfo, network, live, dst, checkpoint=False, node=-1):
if line == "suspend":
log.debug("Suspending %d ...", dominfo.getDomid())
dominfo.shutdown('suspend')
dominfo.waitForShutdown()
dominfo.waitForSuspend()
if line in ('suspend', 'suspended'):
dominfo.migrateDevices(network, dst, DEV_MIGRATE_STEP2,
domain_name)
+25
View File
@@ -2544,6 +2544,31 @@ class XendDomainInfo:
finally:
self.state_updated.release()
def waitForSuspend(self):
"""Wait for the guest to respond to a suspend request by
shutting down. If the guest hasn't re-written control/shutdown
after a certain amount of time, it's obviously not listening and
won't suspend, so we give up. HVM guests with no PV drivers
should already be shutdown.
"""
state = "suspend"
nr_tries = 60
self.state_updated.acquire()
try:
while self._stateGet() in (DOM_STATE_RUNNING,DOM_STATE_PAUSED):
self.state_updated.wait(1.0)
if state == "suspend":
if nr_tries == 0:
msg = ('Timeout waiting for domain %s to suspend'
% self.domid)
self._writeDom('control/shutdown', '')
raise XendError(msg)
state = self.readDom('control/shutdown')
nr_tries -= 1
finally:
self.state_updated.release()
#
# TODO: recategorise - called from XendCheckpoint
#
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.