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] Refresh domain list periodically.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Refresh domain list periodically.
From: BitKeeper Bot <riel@xxxxxxxxxxx>
Date: Mon, 25 Apr 2005 13:04:17 +0000
Delivery-date: Fri, 13 May 2005 20:03:39 +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.1327.2.8, 2005/04/25 14:04:17+01:00, mjw@xxxxxxxxxxxxxxxxxxx

        Refresh domain list periodically.
        Signed-off-by: Mike Wray <mike.wray@xxxxxx>



 XendDomain.py       |   33 +++++++++++----------------------
 server/SrvDaemon.py |    6 +++++-
 server/channel.py   |    8 ++++++++
 3 files changed, 24 insertions(+), 23 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-13 16:04:15 -04:00
+++ b/tools/python/xen/xend/XendDomain.py       2005-05-13 16:04:15 -04:00
@@ -109,7 +109,7 @@
         """Event handler for virq.
         """
         print 'onVirq>', val
-        self.reap()
+        self.refresh_schedule(delay=0)
 
     def schedule_later(self, _delay, _name, _fn, *args):
         """Schedule a function to be called later (if not already scheduled).
@@ -128,18 +128,6 @@
         """
         self.scheduler.cancel(name)
 
-    def reap_schedule(self, delay=1):
-        """Schedule reap to be called later.
-
-        @param delay: delay in seconds
-        """
-        self.schedule_later(delay, 'reap', self.reap)
-
-    def reap_cancel(self):
-        """Cancel any scheduled reap.
-        """
-        self.schedule_cancel('reap')
-
     def refresh_schedule(self, delay=1):
         """Schedule refresh to be called later.
         
@@ -289,7 +277,6 @@
         """Look for domains that have crashed or stopped.
         Tidy them up.
         """
-        self.reap_cancel()
         casualties = []
         doms = self.xen_domains()
         for d in doms.values():
@@ -311,7 +298,7 @@
             log.debug('XendDomain>reap> domain died name=%s id=%s', name, id)
             if d['shutdown']:
                 reason = XendDomainInfo.shutdown_reason(d['shutdown_reason'])
-                log.debug('XendDomain>reap> shutdown id=%s reason=%s', id, 
reason)
+                log.debug('XendDomain>reap> shutdown name=%s id=%s reason=%s', 
name, id, reason)
                 if reason in ['suspend']:
                     if dominfo and dominfo.is_terminated():
                         log.debug('XendDomain>reap> Suspended domain died 
id=%s', id)
@@ -327,21 +314,24 @@
             self.final_domain_destroy(id)
         if self.domain_restarts_exist():
             self.domain_restarts_schedule()
-        if destroyed:
-            self.refresh_schedule(delay=5)
 
     def refresh(self):
         """Refresh domain list from Xen.
         """
         self.refresh_cancel()
+        self.refresh_schedule(delay=10)
+        self.reap()
         doms = self.xen_domains()
         # Add entries for any domains we don't know about.
         for (id, d) in doms.items():
             if id not in self.domain_by_id:
-                log.warning("Created entry for unknown domain: %s", id)
+                log.info("Creating entry for unknown domain: id=%s", id)
                 savedinfo = None
-                dominfo = XendDomainInfo.vm_recreate(savedinfo, d)
-                self._add_domain(dominfo)
+                try:
+                    dominfo = XendDomainInfo.vm_recreate(savedinfo, d)
+                    self._add_domain(dominfo)
+                except Exception, ex:
+                    log.exception("Error creating domain info: id=%s", id)
         # Remove entries for domains that no longer exist.
         # Update entries for existing domains.
         for d in self.domain_by_id.values():
@@ -352,7 +342,6 @@
                 pass
             else:
                 self._delete_domain(d.id)
-        self.reap_schedule(delay=1)
 
     def update_domain(self, id):
         """Update the saved info for a domain.
@@ -416,7 +405,7 @@
 
         @param dominfo: domain object
         """
-        log.info("Restarting domain: id=%s name=%s", dominfo.id, dominfo.name)
+        log.info("Restarting domain: name=%s id=%s", dominfo.name, dominfo.id)
         eserver.inject("xend.domain.restart",
                        [dominfo.name, dominfo.id, "begin"])
         try:
diff -Nru a/tools/python/xen/xend/server/SrvDaemon.py 
b/tools/python/xen/xend/server/SrvDaemon.py
--- a/tools/python/xen/xend/server/SrvDaemon.py 2005-05-13 16:04:15 -04:00
+++ b/tools/python/xen/xend/server/SrvDaemon.py 2005-05-13 16:04:15 -04:00
@@ -41,8 +41,11 @@
     """The xend daemon.
     """
     def __init__(self):
+        self.channelF = None
         self.shutdown = 0
         self.traceon = 0
+        self.tracefile = None
+        self.traceindent = 0
 
     def daemon_pids(self):
         pids = []
@@ -352,7 +355,8 @@
 
     def exit(self, rc=0):
         #reactor.disconnectAll()
-        self.channelF.stop()
+        if self.channelF:
+            self.channelF.stop()
         # Calling sys.exit() raises a SystemExit exception, which only
         # kills the current thread. Calling os._exit() makes the whole
         # Python process exit immediately. There doesn't seem to be another
diff -Nru a/tools/python/xen/xend/server/channel.py 
b/tools/python/xen/xend/server/channel.py
--- a/tools/python/xen/xend/server/channel.py   2005-05-13 16:04:15 -04:00
+++ b/tools/python/xen/xend/server/channel.py   2005-05-13 16:04:15 -04:00
@@ -6,6 +6,8 @@
 import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
 from xen.lowlevel import xu
 
+from xen.xend.XendLogging import log
+
 from messages import *
 
 VIRQ_MISDIRECT  = 0  # Catch-all interrupt for unbound VIRQs.
@@ -74,6 +76,7 @@
     def bind_virq(self, virq):
         port = self.notifier.bind_virq(virq)
         self.virqPorts[port] = virq
+        log.info("Virq %s on port %s", virq, port)
 
     def virq(self):
         self.notifier.virq_send(self.virqPort)
@@ -112,16 +115,21 @@
         # Note we use keyword args to lambda to save the values -
         # otherwise lambda will use the variables, which will get
         # assigned by the loop and the lambda will get the changed values.
+        received = 0
         for chan in self.channels.values():
             if self.thread == None: return
             msg = chan.readResponse()
             if msg:
+                received += 1
                 chan.responseReceived(msg)
         for chan in self.channels.values():
             if self.thread == None: return
             msg = chan.readRequest()
             if msg:
+                received += 1
                 self.runInThread(lambda chan=chan, msg=msg: 
chan.requestReceived(msg))
+        if port and received == 0:
+            log.warning("Port %s notified, but no messages found", port)
 
     def runInThread(self, thunk):
         thread = threading.Thread(target = thunk)

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Refresh domain list periodically., BitKeeper Bot <=