# HG changeset patch
# User John Levon <john.levon@xxxxxxx>
# Date 1236822206 25200
# Node ID 7bc32ac888a5088e6c704252675e49468cdf7456
# Parent 0bcb69805b1e11a8b36d92362d74d95653458589
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@xxxxxxx>
diff --git a/tools/python/xen/xend/XendCheckpoint.py
b/tools/python/xen/xend/XendCheckpoint.py
--- a/tools/python/xen/xend/XendCheckpoint.py
+++ b/tools/python/xen/xend/XendCheckpoint.py
@@ -114,7 +114,7 @@ def save(fd, dominfo, network, live, dst
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)
diff --git a/tools/python/xen/xend/XendDomainInfo.py
b/tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py
+++ b/tools/python/xen/xend/XendDomainInfo.py
@@ -2607,6 +2607,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
#
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|