[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Remove the watch on the /vm/<uuid> path when rebooting or migrating. We don't



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID d581e11e247c72ac48ae5be69fd5c08a823dd655
# Parent  f23db20517850e84fbc40fe3c09211d9f5defa39
Remove the watch on the /vm/<uuid> path when rebooting or migrating.  We don't
want to end up with multiple watches on the same path, otherwise we get a
watch event storm after many such reboots or migrates.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>

diff -r f23db2051785 -r d581e11e247c tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Dec  2 15:35:22 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Fri Dec  2 15:36:39 2005
@@ -775,7 +775,10 @@
                     if reason == 'suspend':
                         self.state_set(STATE_DOM_SHUTDOWN)
                         # Don't destroy the domain.  XendCheckpoint will do
-                        # this once it has finished.
+                        # this once it has finished.  However, stop watching
+                        # the VM path now, otherwise we will end up with one
+                        # watch for the old domain, and one for the new.
+                        self.unwatchVm()
                     elif reason in ['poweroff', 'reboot']:
                         restart_reason = reason
                     else:
@@ -1185,18 +1188,31 @@
     def cleanupVm(self):
         """Cleanup VM resources.  Idempotent.  Nothrow guarantee."""
 
+        self.unwatchVm()
+
+        try:
+            self.removeVm()
+        except:
+            log.exception("Removing VM path failed.")
+
+
+    ## private:
+
+    def unwatchVm(self):
+        """Remove the watch on the VM path, if any.  Idempotent.  Nothrow
+        guarantee."""
+
         try:
             try:
                 if self.vmWatch:
                     self.vmWatch.unwatch()
+            finally:
                 self.vmWatch = None
-            except:
-                log.exception("Unwatching VM path failed.")
-
-            self.removeVm()
         except:
-            log.exception("Removing VM path failed.")
-
+            log.exception("Unwatching VM path failed.")
+
+
+    ## public:
 
     def destroy(self):
         """Cleanup VM and destroy domain.  Nothrow guarantee."""
@@ -1351,6 +1367,7 @@
             if rename:
                 self.preserveForRestart()
             else:
+                self.unwatchVm()
                 self.destroyDomain()
 
             # new_dom's VM will be the same as this domain's VM, except where
@@ -1387,6 +1404,7 @@
         log.info("Renaming dead domain %s (%d, %s) to %s (%s).",
                  self.info['name'], self.domid, self.info['uuid'],
                  new_name, new_uuid)
+        self.unwatchVm()
         self.release_devices()
         self.info['name'] = new_name
         self.info['uuid'] = new_uuid
@@ -1398,6 +1416,7 @@
     def preserve(self):
         log.info("Preserving dead domain %s (%d).", self.info['name'],
                  self.domid)
+        self.unwatchVm()
         self.storeDom('xend/shutdown_completed', 'True')
         self.state_set(STATE_DOM_SHUTDOWN)
 

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.