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][xend] cs 15157 breaks block-detach

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH][xend] cs 15157 breaks block-detach
From: Jim Fehlig <jfehlig@xxxxxxxxxx>
Date: Thu, 07 Jun 2007 18:30:47 -0600
Cc: Mats.Petersson@xxxxxxx
Delivery-date: Thu, 07 Jun 2007 17:29:02 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
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: Thunderbird 1.5.0.8 (X11/20060911)
c/s 15157 introduced a regression in block-detach.  Prior to this c/s,
user was able to specify device name or id, e.g.

xm block-detach dom xvdb
xm block-detach dom 15728

Now, 'xm block-detach dom xvdb' silently fails.  xend.log does contain
the following

[2007-06-07 11:39:18 xend.XendDomainInfo 3775] DEBUG
(XendDomainInfo:519) devName=vbd/51712
[2007-06-07 11:39:18 xend.XendDomainInfo 3775] DEBUG
(XendDomainInfo:527) Could not find the device xvdb

This patch restores the previous behavior but retains the bug originally
fixed by c/s 15571.

  Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxxxx>

Mats - you may want to give this a spin through your save/restore test,
but my initial testing shows no accumulated, orphaned entries in xenstore.

Regards,
Jim



diff -r bd3d6b4c52ec tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Fri Jun 01 14:50:52 2007 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py   Thu Jun 07 18:05:23 2007 -0600
@@ -546,31 +546,18 @@ class XendDomainInfo:
             self.getDeviceController(devclass).waitForDevices()
 
     def destroyDevice(self, deviceClass, devid, force = False):
-        found = True                    # Assume devid is an integer.
         try:
-            devid = int(devid)
+            dev = int(devid)
         except ValueError:
-            # devid is not a number, let's search for it in xenstore.
-            devicePath = '%s/device/%s' % (self.dompath, deviceClass)
-            found = False
-            for entry in xstransact.List(devicePath):
-                log.debug("Attempting to find devid at %s/%s", devicePath, 
entry)
-                backend = xstransact.Read('%s/%s' % (devicePath, entry),
-                                          "backend")
-                if backend != None:
-                    devName = '%s/%s' % (deviceClass, entry)
-                    log.debug("devName=%s", devName)
-                    if devName == devid:
-                        # We found the integer matching our devid, use it 
instead
-                        devid = int(entry)
-                        found = True
-                        break
-
-        if not found:
-            log.debug("Could not find the device %s", devid)
-            return None
-        log.debug("devid = %s", devid)
-        return self.getDeviceController(deviceClass).destroyDevice(devid, 
force)
+            # devid is not a number but a string containing either device
+            # name (e.g. xvda) or device_type/device_id (e.g. vbd/51728)
+            dev = type(devid) is str and devid.split('/')[-1] or None
+            if dev == None:
+                log.debug("Could not find the device %s", devid)
+                return None
+
+        log.debug("dev = %s", dev)
+        return self.getDeviceController(deviceClass).destroyDevice(dev, force)
 
     def getDeviceSxprs(self, deviceClass):
         if self._stateGet() in (DOM_STATE_RUNNING, DOM_STATE_PAUSED):
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] [PATCH][xend] cs 15157 breaks block-detach, Jim Fehlig <=