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-devel

[Xen-devel] [PATCH] Fix stale-state issue with 'xm dom{id,name}'

To: Xen Developers <xen-devel@xxxxxxxxxxxxxxxxxxx>
Subject: [Xen-devel] [PATCH] Fix stale-state issue with 'xm dom{id,name}'
From: Dan Smith <danms@xxxxxxxxxx>
Date: Wed, 28 Sep 2005 08:35:03 -0700
Delivery-date: Wed, 28 Sep 2005 15:33:21 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Gnus/5.110003 (No Gnus v0.3) Emacs/21.3 (gnu/linux)
This patch prevents 'xm dom{id,name}' from returning stale information
after a domain has exited.

Xend already called XendDomainInfo.update() before returning
information, but did not check to see if the result indicated that the
domain had disappeared.  So, it updated the domain (which just bails
if the domain is gone) and then returned info from its internal data
structures.  This means that if you run "xm destroy foo", you can then
run "xm domid" or "xm domname" many times, getting stale info.

Instead of modifying Xend's state in a "random place", we just make
sure to throw an error if we know the state is invalid.

This patch causes xm-test 01_shutdown_basic_pos to pass now.  Xm-test
uses domid and domname in many places to determine if a domain is
running or not (as, I would imagine, other higher-level tools might).
Having this information consistent with the actual state is a good
thing.

Signed-off-by: Dan Smith <danms@xxxxxxxxxx>
diff -r ca78d9668fdb tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Wed Sep 28 14:06:48 2005
+++ b/tools/python/xen/xend/XendDomainInfo.py   Wed Sep 28 08:22:10 2005
@@ -693,7 +693,7 @@
         if not info:
             info = dom_get(self.domid)
             if not info:
-                return
+                return False
             
         self.info.update(info)
         self.validateInfo()
@@ -701,6 +701,8 @@
 
         log.debug("XendDomainInfo.update done on domain %d: %s", self.domid,
                   self.info)
+
+        return True
 
 
     ## private:
diff -r ca78d9668fdb tools/python/xen/xend/server/SrvDomain.py
--- a/tools/python/xen/xend/server/SrvDomain.py Wed Sep 28 14:06:48 2005
+++ b/tools/python/xen/xend/server/SrvDomain.py Wed Sep 28 08:22:10 2005
@@ -21,6 +21,8 @@
 from xen.xend import XendDomain
 from xen.xend import PrettyPrint
 from xen.xend.Args import FormFn
+from xen.xend.XendError import XendError
+from xen.xend.XendLogging import log
 
 from xen.web.SrvDir import SrvDir
 
@@ -221,7 +223,9 @@
         #
         # if op and op[0] in ['vifs', 'vif', 'vbds', 'vbd', 'mem_target_set']:
         #    return self.perform(req)
-        self.dom.update()
+        if not self.dom.update():
+            raise XendError("Domain %s no longer exists" % self.dom.getName())
+
         if self.use_sxp(req):
             req.setHeader("Content-Type", sxp.mime_type)
             sxp.show(self.dom.sxpr(), out=req)
diff -r ca78d9668fdb tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Wed Sep 28 14:06:48 2005
+++ b/tools/python/xen/xm/main.py       Wed Sep 28 08:22:10 2005
@@ -32,6 +32,7 @@
 warnings.filterwarnings('ignore', category=FutureWarning)
 from xen.xend import PrettyPrint
 from xen.xend import sxp
+from xen.xend.XendClient import XendError
 from xen.xm.opts import *
 shorthelp = """Usage: xm <subcommand> [args]
     Control, list, and manipulate Xen guest instances
@@ -385,14 +386,24 @@
     name = args[0]
 
     from xen.xend.XendClient import server
-    dom = server.xend_domain(name)
+    try:
+        dom = server.xend_domain(name)
+    except XendError, e:
+        err("Unable to get info for domain %s" % name)
+        sys.exit(1)
+        
     print sxp.child_value(dom, 'domid')
     
 def xm_domname(args):
     name = args[0]
 
     from xen.xend.XendClient import server
-    dom = server.xend_domain(name)
+    try:
+        dom = server.xend_domain(name)
+    except XendError, e:
+        err("Unable to get info for domain %s" % name)
+        sys.exit(1)
+        
     print sxp.child_value(dom, 'name')
 
 def xm_sched_bvt(args):
@@ -687,7 +698,6 @@
     args = argv[2:]
     if cmd:
         try:
-            from xen.xend.XendClient import XendError
             rc = cmd(args)
             if rc:
                 usage()
-- 
Dan Smith
IBM Linux Technology Center
Open Hypervisor Team
email: danms@xxxxxxxxxx
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH] Fix stale-state issue with 'xm dom{id,name}', Dan Smith <=