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

[Xen-changelog] [xen-unstable] [XEND] Remove mistake of not checking xenstore's name entry for Dom0



# HG changeset patch
# User Alastair Tse <atse@xxxxxxxxxxxxx>
# Node ID 7ae6323db2f8d35d9d8e99b6494da6e9ca47279b
# Parent  f0c7f258c19e0bd1f231dab4185287a0cff4db73
[XEND] Remove mistake of not checking xenstore's name entry for Dom0

Also fix logic with detecting whether devid is an int or not because
xm passes this as a string all the time.

Signed-off-by: Alastair Tse <atse@xxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendDomain.py     |    3 -
 tools/python/xen/xend/XendDomainInfo.py |   55 +++++++++++++++++---------------
 2 files changed, 31 insertions(+), 27 deletions(-)

diff -r f0c7f258c19e -r 7ae6323db2f8 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Thu Oct 19 17:46:54 2006 +0100
+++ b/tools/python/xen/xend/XendDomain.py       Thu Oct 19 17:48:54 2006 +0100
@@ -93,9 +93,8 @@ class XendDomain:
                 dom0info = [d for d in self._running_domains() \
                             if d['domid'] == DOM0_ID][0]
                 
+                dom0info['name'] = DOM0_NAME
                 dom0 = XendDomainInfo.recreate(dom0info, True)
-                # Sometimes this is not set?
-                dom0.setName(DOM0_NAME)
                 self._add_domain(dom0)
             except IndexError:
                 raise XendError('Unable to find Domain 0')
diff -r f0c7f258c19e -r 7ae6323db2f8 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py   Thu Oct 19 17:46:54 2006 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py   Thu Oct 19 17:48:54 2006 +0100
@@ -29,6 +29,7 @@ import threading
 import threading
 import re
 import copy
+from types import StringTypes
 
 import xen.lowlevel.xc
 from xen.util import asserts
@@ -183,7 +184,8 @@ def recreate(info, priv):
         raise XendError('No domain path in store for existing '
                         'domain %d' % domid)
 
-    log.info("Recreating domain %d, UUID %s.", domid, xeninfo['uuid'])
+    log.info("Recreating domain %d, UUID %s. at %s" %
+             (domid, xeninfo['uuid'], dompath))
 
     # need to verify the path and uuid if not Domain-0
     # if the required uuid and vm aren't set, then that means
@@ -193,29 +195,28 @@ def recreate(info, priv):
     #       abort or ignore, but there may be cases where xenstore's
     #       entry disappears (eg. xenstore-rm /)
     #
-    if domid != 0:
-        try:
-            vmpath = xstransact.Read(dompath, "vm")
-            if not vmpath:
-                log.warn('/dom/%d/vm is missing. recreate is confused, '
-                         'trying our best to recover' % domid)
-                needs_reinitialising = True
-                raise XendError('reinit')
-            
-            uuid2_str = xstransact.Read(vmpath, "uuid")
-            if not uuid2_str:
-                log.warn('%s/uuid/ is missing. recreate is confused, '
-                         'trying our best to recover' % vmpath)
-                needs_reinitialising = True
-                raise XendError('reinit')
-
-            uuid2 = uuid.fromString(uuid2_str)
-            if uuid1 != uuid2:
-                log.warn('UUID in /vm does not match the UUID in /dom/%d.'
-                         'Trying out best to recover' % domid)
-                needs_reinitialising = True
-        except XendError:
-            pass # our best shot at 'goto' in python :)
+    try:
+        vmpath = xstransact.Read(dompath, "vm")
+        if not vmpath:
+            log.warn('/local/domain/%d/vm is missing. recreate is '
+                     'confused, trying our best to recover' % domid)
+            needs_reinitialising = True
+            raise XendError('reinit')
+        
+        uuid2_str = xstransact.Read(vmpath, "uuid")
+        if not uuid2_str:
+            log.warn('%s/uuid/ is missing. recreate is confused, '
+                     'trying our best to recover' % vmpath)
+            needs_reinitialising = True
+            raise XendError('reinit')
+        
+        uuid2 = uuid.fromString(uuid2_str)
+        if uuid1 != uuid2:
+            log.warn('UUID in /vm does not match the UUID in /dom/%d.'
+                     'Trying out best to recover' % domid)
+            needs_reinitialising = True
+    except XendError:
+        pass # our best shot at 'goto' in python :)
 
     vm = XendDomainInfo(xeninfo, domid, dompath, augment = True, priv = priv)
     
@@ -537,7 +538,10 @@ class XendDomainInfo:
             self.getDeviceController(devclass).waitForDevices()
 
     def destroyDevice(self, deviceClass, devid):
-        if type(devid) is str:
+        try:
+            devid = int(devid)
+        except ValueError:
+            # devid is not a number, let's search for it in xenstore.
             devicePath = '%s/device/%s' % (self.dompath, deviceClass)
             for entry in xstransact.List(devicePath):
                 backend = xstransact.Read('%s/%s' % (devicePath, entry),
@@ -547,6 +551,7 @@ class XendDomainInfo:
                     # We found the integer matching our devid, use it instead
                     devid = entry
                     break
+                
         return self.getDeviceController(deviceClass).destroyDevice(devid)
 
 

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