diff --git a/tools/python/xen/xend/XendDomainInfo.py b/tools/python/xen/xend/XendDomainInfo.py index b8aba6bb99..78b33145ea 100644 --- a/tools/python/xen/xend/XendDomainInfo.py +++ b/tools/python/xen/xend/XendDomainInfo.py @@ -288,6 +288,18 @@ def append_deferred(dlist, v): if isinstance(v, defer.Deferred): dlist.append(v) +def dlist_err(val): + """Error callback suitable for a deferred list. + In a deferred list the error callback is called with with Failure((error, index)). + This callback extracts the error and returns it. + + @param val: Failure containing (error, index) + @type val: twisted.internet.failure.Failure + """ + + (error, index) = val.value + return error + class XendDomainInfo: """Virtual machine object.""" @@ -763,6 +775,7 @@ class XendDomainInfo: append_deferred(dlist, v) index[dev_name] = dev_index + 1 deferred = defer.DeferredList(dlist, fireOnOneErrback=1) + deferred.addErrback(dlist_err) return deferred def device_create(self, dev_config): @@ -994,6 +1007,7 @@ class XendDomainInfo: log.warning("Unknown config field %s", field_name) index[field_name] = field_index + 1 d = defer.DeferredList(dlist, fireOnOneErrback=1) + d.addErrback(dlist_err) return d @@ -1007,7 +1021,7 @@ def vm_image_linux(vm, image): """ kernel = sxp.child_value(image, "kernel") cmdline = "" - ip = sxp.child_value(image, "ip", "dhcp") + ip = sxp.child_value(image, "ip", None) if ip: cmdline += " ip=" + ip root = sxp.child_value(image, "root") diff --git a/tools/python/xen/xend/server/SrvDomainDir.py b/tools/python/xen/xend/server/SrvDomainDir.py index 6307b25089..4526b996f9 100644 --- a/tools/python/xen/xend/server/SrvDomainDir.py +++ b/tools/python/xen/xend/server/SrvDomainDir.py @@ -5,6 +5,7 @@ from StringIO import StringIO from twisted.protocols import http from twisted.web import error +from twisted.python.failure import Failure from xen.xend import sxp from xen.xend import XendDomain @@ -94,6 +95,8 @@ class SrvDomainDir(SrvDir): def _op_create_err(self, err, req): """Callback to handle errors in deferred domain creation. """ + if isinstance(err, Failure): + err = err.getErrorMessage() print 'op_create> Deferred Exception creating domain:', err req.setResponseCode(http.BAD_REQUEST, "Error creating domain: " + str(err)) return str(err) @@ -127,6 +130,8 @@ class SrvDomainDir(SrvDir): return val def _op_restore_err(self, err, req): + if isinstance(err, Failure): + err = err.getErrorMessage() print 'op_create> Deferred Exception restoring domain:', err req.setResponseCode(http.BAD_REQUEST, "Error restoring domain: "+ str(err)) return str(err) diff --git a/tools/python/xen/xend/server/blkif.py b/tools/python/xen/xend/server/blkif.py index 69f9431f48..e2ba4af4ea 100755 --- a/tools/python/xen/xend/server/blkif.py +++ b/tools/python/xen/xend/server/blkif.py @@ -340,8 +340,8 @@ class BlkDev(controller.SplitDev): val = unpackMsg('blkif_be_vbd_grow_t', msg) status = val['status'] if status != BLKIF_BE_STATUS_OKAY: - raise XendError("Adding extent to vbd failed: device %d, error %d" - % (self.vdev, status)) + raise XendError("Adding extent to vbd failed: device %s, error %d" + % (sxp.to_string(self.config), status)) return self def send_be_vbd_destroy(self):