Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:lafenghu
xen
xen-domUloader.diff
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xen-domUloader.diff of Package xen
Index: xen-4.1.2-testing/tools/python/xen/xend/server/DevController.py =================================================================== --- xen-4.1.2-testing.orig/tools/python/xen/xend/server/DevController.py +++ xen-4.1.2-testing/tools/python/xen/xend/server/DevController.py @@ -592,6 +592,31 @@ class DevController: return (Missing, None) + def waitForFrontend(self, devid): + def frontendStatusCallback(statusPath, ev, result): + status = xstransact.Read(statusPath) + log.debug("frontendStatusCallback %s = %s" % (statusPath, status)) + try: + status = int(status) + if status == xenbusState['Connected']: + result['status'] = Connected + elif status == xenbusState['Closed']: + result['status'] = Error + else: + raise + except: + return 1 + ev.set() + return 0 + frontpath = self.frontendPath(devid) + statusPath = frontpath + '/state' + ev = Event() + result = { 'status': Timeout } + xswatch(statusPath, frontendStatusCallback, ev, result) + ev.wait(5) + return result['status'] + + def backendPath(self, backdom, devid): """Construct backend path given the backend domain and device id. Index: xen-4.1.2-testing/tools/python/xen/xend/XendBootloader.py =================================================================== --- xen-4.1.2-testing.orig/tools/python/xen/xend/XendBootloader.py +++ xen-4.1.2-testing/tools/python/xen/xend/XendBootloader.py @@ -12,7 +12,7 @@ # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. # -import os, select, errno, stat, signal, tty +import os, select, errno, stat, signal, tty, time import random import shlex from xen.xend import sxp @@ -38,8 +38,25 @@ def bootloader(blexec, disk, dom, quiet msg = "Bootloader isn't executable" log.error(msg) raise VmError(msg) - if not os.access(disk, os.R_OK): - msg = "Disk isn't accessible" + + # domUloader requires '--entry=foo' in blargs, which is derived from + # 'bootargs' entry in domain configuration file. Ensure it exists + # here so a reasonable error message can be returned. + if blexec.find('domUloader.py') != -1: + if blargs.find('entry') == -1: + msg = "domUloader requires specification of bootargs" + log.error(msg) + raise VmError(msg) + + avail = False + for i in xrange(1, 100): + avail = os.access(disk, os.R_OK) + if avail: + break + time.sleep(.1) + + if not avail: + msg = "Disk '%s' isn't accessible" % disk log.error(msg) raise VmError(msg) Index: xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py =================================================================== --- xen-4.1.2-testing.orig/tools/python/xen/xend/XendDomainInfo.py +++ xen-4.1.2-testing/tools/python/xen/xend/XendDomainInfo.py @@ -2333,6 +2333,10 @@ class XendDomainInfo: deviceClass, config = self.info['devices'].get(dev_uuid) self._waitForDevice(deviceClass, config['devid']) + def _waitForDeviceFrontUUID(self, dev_uuid): + deviceClass, config = self.info['devices'].get(dev_uuid) + self.getDeviceController(deviceClass).waitForFrontend(config['devid']) + def _waitForDevice_destroy(self, deviceClass, devid, backpath): return self.getDeviceController(deviceClass).waitForDevice_destroy( devid, backpath) @@ -3278,7 +3282,8 @@ class XendDomainInfo: from xen.xend import XendDomain dom0 = XendDomain.instance().privilegedDomain() mounted_vbd_uuid = dom0.create_vbd(vbd, disk); - dom0._waitForDeviceUUID(mounted_vbd_uuid) + vbd_uuid = dom0.create_vbd(vbd, disk) + dom0._waitForDeviceFrontUUID(vbd_uuid) fn = BOOTLOADER_LOOPBACK_DEVICE try: @@ -3288,10 +3293,10 @@ class XendDomainInfo: if mounted: log.info("Unmounting %s from %s." % (fn, BOOTLOADER_LOOPBACK_DEVICE)) - _, vbd_info = dom0.info['devices'][mounted_vbd_uuid] - dom0.destroyDevice(dom0.getBlockDeviceClass(vbd_info['devid']), - BOOTLOADER_LOOPBACK_DEVICE, force = True) - + if devtype in ['tap', 'tap2']: + dom0.destroyDevice('tap', BOOTLOADER_LOOPBACK_DEVICE, rm_cfg = True) + else: + dom0.destroyDevice('vbd', BOOTLOADER_LOOPBACK_DEVICE, rm_cfg = True) if blcfg is None: msg = "Had a bootloader specified, but can't find disk" log.error(msg)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor