WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] XendDomainInfo.py, XendDomain.py:

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] XendDomainInfo.py, XendDomain.py:
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Thu, 19 May 2005 15:23:39 +0000
Delivery-date: Thu, 19 May 2005 16:03:00 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: Xen Development List <xen-devel@xxxxxxxxxxxxxxxxxxx>
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
ChangeSet 1.1461.1.1, 2005/05/19 16:23:39+01:00, cl349@xxxxxxxxxxxxxxxxxxxx

        XendDomainInfo.py, XendDomain.py:
          Remove DomainShutdown class and store shutdown information in domain's
          XendDomainInfo object.
        Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>



 XendDomain.py     |   83 +++++++++---------------------------------------------
 XendDomainInfo.py |   12 +++++++
 2 files changed, 26 insertions(+), 69 deletions(-)


diff -Nru a/tools/python/xen/xend/XendDomain.py 
b/tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       2005-05-19 12:03:39 -04:00
+++ b/tools/python/xen/xend/XendDomain.py       2005-05-19 12:03:39 -04:00
@@ -28,47 +28,6 @@
 
 SHUTDOWN_TIMEOUT = 30
 
-class DomainShutdown:
-    """A pending domain shutdown. The domain is asked to shut down,
-    if it has not terminated or rebooted when the timeout expires it
-    is destroyed.
-    """
-
-    def __init__(self, dominfo, reason, key, timeout=None):
-        if timeout is None:
-            timeout = SHUTDOWN_TIMEOUT
-        self.start = time.time()
-        self.timeout = timeout
-        self.dominfo = dominfo
-        self.last_restart_time = dominfo.restart_time
-        self.last_restart_count = dominfo.restart_count
-        self.reason = reason
-        self.key = key
-
-    def getDomain(self):
-        return self.dominfo.id
-
-    def getDomainName(self):
-        return self.dominfo.name
-
-    def getReason(self):
-        return self.reason
-
-    def getTimeout(self):
-        return self.timeout
-
-    def isTerminated(self):
-        return self.dominfo.is_terminated()
-
-    def isRestarted(self):
-        return (self.dominfo.restart_count > self.last_restart_count)
-
-    def isShutdown(self):
-        return self.isTerminated() or self.isRestarted()
-
-    def isExpired(self):
-        return (time.time() - self.start) > self.timeout
-        
 class XendDomain:
     """Index of all domains. Singleton.
     """
@@ -80,9 +39,6 @@
     domain_by_id = {}
     domain_by_name = {}
     
-    """Table of pending domain shutdowns, indexed by domain id."""
-    shutdowns_by_id = {}
-
     def __init__(self):
         # Hack alert. Python does not support mutual imports, but 
XendDomainInfo
         # needs access to the XendDomain instance to look up domains. 
Attempting
@@ -465,43 +421,34 @@
             reason = 'poweroff'
         val = dominfo.shutdown(reason, key=key)
         if reason != 'sysrq':
-            self.add_shutdown(dominfo, reason, key)
+            self.domain_shutdowns()
         return val
 
-    def add_shutdown(self, dominfo, reason, key):
-        """Add a pending shutdown for a domain.
-        This will destroy the domain if the shutdown times out.
-        """
-        if dominfo.id in self.shutdowns_by_id:
-            return
-        self.shutdowns_by_id[dominfo.id] = DomainShutdown(dominfo, reason, key)
-        self.domain_shutdowns()
-
     def domain_shutdowns(self):
         """Process pending domain shutdowns.
         Destroys domains whose shutdowns have timed out.
         """
-        timeout = SHUTDOWN_TIMEOUT
-        for shutdown in self.shutdowns_by_id.values():
-            id = shutdown.getDomain()
-            if shutdown.isShutdown():
-                # Shutdown done - remove.
-                print 'domain_shutdowns> done: ', id
-                del self.shutdowns_by_id[id]
-            elif shutdown.isExpired():
-                # Shutdown expired - remove and destroy domain.
-                del self.shutdowns_by_id[id]
+        timeout = SHUTDOWN_TIMEOUT + 1
+        for dominfo in self.domain_by_id.values():
+            if not dominfo.shutdown_pending:
+                # domain doesn't need shutdown
+                continue
+            id = dominfo.id
+            left = dominfo.shutdown_time_left(SHUTDOWN_TIMEOUT)
+            if left <= 0:
+                # Shutdown expired - destroy domain.
                 try:
                     log.info("Domain shutdown timeout expired: name=%s id=%s",
-                             shutdown.getDomainName(), id)
-                    self.domain_destroy(id, reason=shutdown.getReason())
+                             dominfo.name, id)
+                    self.domain_destroy(id, reason=
+                                        dominfo.shutdown_pending['reason'])
                 except Exception:
                     pass
             else:
                 # Shutdown still pending.
                 print 'domain_shutdowns> pending: ', id
-                timeout = min(timeout, shutdown.getTimeout())
-        if self.shutdowns_by_id:
+                timeout = min(timeout, left)
+        if timeout <= SHUTDOWN_TIMEOUT:
             # Pending shutdowns remain - reschedule.
             scheduler.later(timeout, self.domain_shutdowns)
 
diff -Nru a/tools/python/xen/xend/XendDomainInfo.py 
b/tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   2005-05-19 12:03:39 -04:00
+++ b/tools/python/xen/xend/XendDomainInfo.py   2005-05-19 12:03:39 -04:00
@@ -281,6 +281,8 @@
         self.netif_backend = False
         #todo: state: running, suspended
         self.state = STATE_VM_OK
+        self.shutdown_pending = None
+
         #todo: set to migrate info if migrating
         self.migrate = None
         
@@ -950,6 +952,7 @@
         """
         try:
             self.state = STATE_VM_OK
+            self.shutdown_pending = None
             self.restart_check()
             self.restart_state = STATE_RESTART_BOOTING
             if self.bootloader:
@@ -1090,7 +1093,14 @@
         if self.channel:
             msg = messages.packMsg(msgtype, extra)
             self.channel.writeRequest(msg)
-
+        if reason != 'sysrq':
+            self.shutdown_pending = {'start':time.time(), 'reason':reason,
+                                     'key':key}
+
+    def shutdown_time_left(self, timeout):
+        if not self.shutdown_pending:
+            return 0
+        return timeout - (time.time() - self.shutdown_pending['start'])
 
 def vm_image_linux(vm, image):
     """Create a VM for a linux image.

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

<Prev in Thread] Current Thread [Next in Thread>