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

[Xen-changelog] xend cleanups from Mike Wray.



ChangeSet 1.1662.1.1, 2005/06/03 16:03:33+01:00, cl349@xxxxxxxxxxxxxxxxxxxx

        xend cleanups from Mike Wray.
        XendDomain.py:
          Add comment for domain_mem_target_set.
        SrvDaemon.py:
          Use XEND_DAEMONIZE, XEND_DEBUG and XEND_DEBUGLOG.
        XendRoot.py:
          Use XEND_DEBUG.
        netif.py:
          Unknown domains are called "Domain-%d" % dom.
        params.py:
          Add additional parameters and set some parameters from
          environment variables.
        blkif.py, XendDomain.py:
          Cleanup whitespace.
        XendRoot.py:
          enable_dump default is 'no'.
          enable_dump is a bool.
          Add 'true' and 'false' to get_config_bool.
        XendDomainInfo.py:
          Add DOMAIN_CRASH shutdown code.
        XendDomain.py:
          Simplify.
          Add domain_dumpcore.
          Move class XendDomainDict outside of class XendDomain.
          Import shutdown_reason from XendDomainInfo.
          Update comment for xen_domain.
        PrettyPrint.py:
          Cleanup prettyprintstring.
        SrvDir.py:
          Cleanup render_GET.
        xc.c:
          Various cleanups.
        Signed-off-by: Mike Wray <mike.wray@xxxxxx>
        Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>



 lowlevel/xc/xc.c         |    5 +--
 web/SrvDir.py            |   23 ++++++-------
 xend/PrettyPrint.py      |   21 +++++++-----
 xend/XendDomain.py       |   78 ++++++++++++++++++++++++++++-------------------
 xend/XendDomainInfo.py   |    7 +++-
 xend/XendRoot.py         |   11 ++++--
 xend/server/SrvDaemon.py |   10 +++---
 xend/server/blkif.py     |    2 -
 xend/server/netif.py     |    2 -
 xend/server/params.py    |   31 ++++++++++++++++--
 10 files changed, 120 insertions(+), 70 deletions(-)


diff -Nru a/tools/python/xen/lowlevel/xc/xc.c 
b/tools/python/xen/lowlevel/xc/xc.c
--- a/tools/python/xen/lowlevel/xc/xc.c 2005-06-09 13:03:11 -04:00
+++ b/tools/python/xen/lowlevel/xc/xc.c 2005-06-09 13:03:11 -04:00
@@ -14,6 +14,7 @@
 #include <sys/socket.h>
 #include <netdb.h>
 #include <arpa/inet.h>
+
 #include "xc_private.h"
 #include "linux_boot_params.h"
 
@@ -842,8 +843,8 @@
     { "domain_dumpcore", 
       (PyCFunction)pyxc_domain_dumpcore, 
       METH_VARARGS | METH_KEYWORDS, "\n"
-      "dump core of a domain.\n"
-      " dom [int]: Identifier of domain to be paused.\n\n"
+      "Dump core of a domain.\n"
+      " dom [int]: Identifier of domain to dump core of.\n\n"
       " corefile [string]: Name of corefile to be created.\n\n"
       "Returns: [int] 0 on success; -1 on error.\n" },
 
diff -Nru a/tools/python/xen/web/SrvDir.py b/tools/python/xen/web/SrvDir.py
--- a/tools/python/xen/web/SrvDir.py    2005-06-09 13:03:11 -04:00
+++ b/tools/python/xen/web/SrvDir.py    2005-06-09 13:03:11 -04:00
@@ -77,19 +77,16 @@
         return v
 
     def render_GET(self, req):
-        try:
-            if self.use_sxp(req):
-                req.setHeader("Content-type", sxp.mime_type)
-                self.ls(req, 1)
-            else:
-                req.write('<html><head></head><body>')
-                self.print_path(req)
-                self.ls(req)
-                self.form(req)
-                req.write('</body></html>')
-            return ''
-        except Exception, ex:
-            self._perform_err(ex, "GET", req)
+        if self.use_sxp(req):
+            req.setHeader("Content-type", sxp.mime_type)
+            self.ls(req, 1)
+        else:
+            req.write('<html><head></head><body>')
+            self.print_path(req)
+            self.ls(req)
+            self.form(req)
+            req.write('</body></html>')
+        return ''
             
     def ls(self, req, use_sxp=0):
         url = req.prePathURL()
diff -Nru a/tools/python/xen/xend/PrettyPrint.py 
b/tools/python/xen/xend/PrettyPrint.py
--- a/tools/python/xen/xend/PrettyPrint.py      2005-06-09 13:03:11 -04:00
+++ b/tools/python/xen/xend/PrettyPrint.py      2005-06-09 13:03:11 -04:00
@@ -285,15 +285,18 @@
         sxp.show(sxpr, out=out)
     print >> out
 
-def prettyprintstring(sxp):
-    class tmpstr:
-        def __init__(self):
-            self.str = ""
-        def write(self, str):
-            self.str = self.str + str
-    tmp = tmpstr()
-    prettyprint(sxp, out=tmp)
-    return tmp.str
+def prettyprintstring(sxp, width=80):
+    """Prettyprint an SXP form to a string.
+
+    sxpr       s-expression
+    width      maximum output width
+    """
+    io = StringIO.StringIO()
+    prettyprint(sxpr, out=io, width=width)
+    io.seek(0)
+    val = io.getvalue()
+    io.close()
+    return val
 
 def main():
     pin = sxp.Parser()
diff -Nru a/tools/python/xen/xend/XendDomain.py 
b/tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       2005-06-09 13:03:11 -04:00
+++ b/tools/python/xen/xend/XendDomain.py       2005-06-09 13:03:11 -04:00
@@ -20,7 +20,7 @@
 import XendRoot; xroot = XendRoot.instance()
 import XendCheckpoint
 import XendDB
-import XendDomainInfo
+from xen.xend.XendDomainInfo import XendDomainInfo, shutdown_reason
 import EventServer; eserver = EventServer.instance()
 from XendError import XendError
 from XendLogging import log
@@ -31,6 +31,13 @@
 
 SHUTDOWN_TIMEOUT = 30
 
+class XendDomainDict(dict):
+    def get_by_name(self, name):
+        try:
+            return filter(lambda d: d.name == name, self.values())[0]
+        except IndexError, err:
+            return None
+
 class XendDomain:
     """Index of all domains. Singleton.
     """
@@ -38,15 +45,8 @@
     """Path to domain database."""
     dbpath = "domain"
 
-    class XendDomainDict(dict):
-        def get_by_name(self, name):
-            try:
-                return filter(lambda d: d.name == name, self.values())[0]
-            except IndexError, err:
-                return None
-
     """Dict of domain info indexed by domain id."""
-    domains = XendDomainDict()
+    domains = None
     
     def __init__(self):
         # Hack alert. Python does not support mutual imports, but 
XendDomainInfo
@@ -54,6 +54,7 @@
         # to import XendDomain from XendDomainInfo causes unbounded recursion.
         # So we stuff the XendDomain instance (self) into xroot's components.
         xroot.add_component("xen.xend.XendDomain", self)
+        self.domains = XendDomainDict()
         # Table of domain info indexed by domain id.
         self.db = XendDB.XendDB(self.dbpath)
         eserver.subscribe('xend.virq', self.onVirq)
@@ -84,6 +85,8 @@
     def xen_domain(self, dom):
         """Get info about a single domain from xc.
         Returns None if not found.
+
+        @param dom domain id
         """
         try:
             dom = int(dom)
@@ -189,7 +192,7 @@
                 continue
             log.debug('XendDomain>reap> domain died name=%s id=%s', name, id)
             if d['shutdown']:
-                reason = XendDomainInfo.shutdown_reason(d['shutdown_reason'])
+                reason = shutdown_reason(d['shutdown_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():
@@ -203,8 +206,8 @@
                     eserver.inject('xend.domain.exit', [name, id, reason])
                     self.domain_restart_schedule(id, reason)
             else:
-               if xroot.get_enable_dump() == 'true':
-                   xc.domain_dumpcore(dom = int(id), corefile = 
"/var/xen/dump/%s.%s.core"%(name,id))
+               if xroot.get_enable_dump():
+                   self.domain_dumpcore(int(id))
                eserver.inject('xend.domain.exit', [name, id, 'crash']) 
             destroyed += 1
             self.final_domain_destroy(id)
@@ -216,7 +219,7 @@
             self.reap()
         doms = self.xen_domains()
         # Add entries for any domains we don't know about.
-        for (id, d) in doms.items():
+        for id in doms.keys():
             if id not in self.domains:
                 self.domain_lookup(id)
         # Remove entries for domains that no longer exist.
@@ -326,9 +329,7 @@
 
         try:
             fd = os.open(src, os.O_RDONLY)
-
             return XendCheckpoint.restore(self, fd)
-
         except OSError, ex:
             raise XendError("can't read guest state file %s: %s" %
                             (src, ex[1]))
@@ -343,20 +344,19 @@
         self.refresh_domain(id)
         return self.domains.get(id)
 
-    def domain_lookup(self, name):
-        name = str(name)
-        dominfo = self.domains.get_by_name(name) or self.domains.get(name)
-        if dominfo:
-            return dominfo
-        try:
-            d = self.xen_domain(name)
-            if d:
-                log.info("Creating entry for unknown domain: id=%s", name)
-                dominfo = XendDomainInfo.vm_recreate(None, d)
-                self._add_domain(dominfo)
-                return dominfo
-        except Exception, ex:
-            log.exception("Error creating domain info: id=%s", name)
+    def domain_lookup(self, id):
+        name = str(id)
+        dominfo = self.domains.get_by_name(name) or self.domains.get(id)
+        if not dominfo:
+            try:
+                info = self.xen_domain(id)
+                if info:
+                    log.info("Creating entry for unknown domain: id=%s", name)
+                    dominfo = XendDomainInfo.vm_recreate(None, info)
+                    self._add_domain(dominfo)
+            except Exception, ex:
+                log.exception("Error creating domain info: id=%s", name)
+        return dominfo
 
     def domain_unpause(self, id):
         """Unpause domain execution.
@@ -595,6 +595,7 @@
             return xc.sedf_domain_get(dominfo.dom)
         except Exception, ex:
             raise XendError(str(ex))
+
     def domain_device_create(self, id, devconfig):
         """Create a new device for a domain.
 
@@ -700,11 +701,28 @@
             raise XendError(str(ex))
 
     def domain_mem_target_set(self, id, target):
+        """Set the memory target for a domain.
+
+        @param id: domain
+        @param target: memory target (in MB)
+        @return: 0 on success, -1 on error
+        """
         dominfo = self.domain_lookup(id)
         return dominfo.mem_target_set(target)
-        
 
+    def domain_dumpcore(self, id):
+        """Save a core dump for a crashed domain.
 
+        @param id: domain
+        """
+        dominfo = self.domain_lookup(id)
+        corefile = "/var/xen/dump/%s.%s.core"% (dominfo.name, dominfo.id)
+        try:
+            xc.domain_dumpcore(dom=dominfo.id, corefile=corefile)

_______________________________________________
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®.