diff options
author | emellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com> | 2006-03-23 12:59:43 +0100 |
---|---|---|
committer | emellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com> | 2006-03-23 12:59:43 +0100 |
commit | 88aea7e5a858e5489df0d50ad2b0459ba17354d2 (patch) | |
tree | d3ef8ae36b28a4e79b275a37317ae35537bd2eef | |
parent | 91c4832c4909b0066debdb6dd066951662199a21 (diff) | |
download | xen-88aea7e5a858e5489df0d50ad2b0459ba17354d2.tar.gz xen-88aea7e5a858e5489df0d50ad2b0459ba17354d2.tar.bz2 xen-88aea7e5a858e5489df0d50ad2b0459ba17354d2.zip |
Improve error handling, in particular fixing the ProtocolError that is thrown
when a domain is specified by the user that does not exist. Added a few
error codes -- many more to come, I expect.
Signed-off-by: Ewan Mellor <ewan@xensource.com>
-rw-r--r-- | tools/python/xen/xend/XendClient.py | 4 | ||||
-rw-r--r-- | tools/python/xen/xend/XendError.py | 4 | ||||
-rw-r--r-- | tools/python/xen/xend/server/XMLRPCServer.py | 30 | ||||
-rw-r--r-- | tools/python/xen/xm/main.py | 9 |
4 files changed, 38 insertions, 9 deletions
diff --git a/tools/python/xen/xend/XendClient.py b/tools/python/xen/xend/XendClient.py index 46ed63866e..974f4b7121 100644 --- a/tools/python/xen/xend/XendClient.py +++ b/tools/python/xen/xend/XendClient.py @@ -21,4 +21,8 @@ from xen.util.xmlrpclib2 import ServerProxy XML_RPC_SOCKET = "/var/run/xend-xmlrpc.sock" +ERROR_INTERNAL = 1 +ERROR_GENERIC = 2 +ERROR_INVALID_DOMAIN = 3 + server = ServerProxy('httpu:///var/run/xend-xmlrpc.sock') diff --git a/tools/python/xen/xend/XendError.py b/tools/python/xen/xend/XendError.py index 0b0dc7b3a3..efe7fe5e32 100644 --- a/tools/python/xen/xend/XendError.py +++ b/tools/python/xen/xend/XendError.py @@ -17,10 +17,12 @@ from xmlrpclib import Fault +import XendClient + class XendError(Fault): def __init__(self, value): - Fault.__init__(self, 2, value) + Fault.__init__(self, XendClient.ERROR_GENERIC, value) self.value = value def __str__(self): diff --git a/tools/python/xen/xend/server/XMLRPCServer.py b/tools/python/xen/xend/server/XMLRPCServer.py index 8c3890fe62..1e553a84e3 100644 --- a/tools/python/xen/xend/server/XMLRPCServer.py +++ b/tools/python/xen/xend/server/XMLRPCServer.py @@ -13,25 +13,45 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #============================================================================ # Copyright (C) 2006 Anthony Liguori <aliguori@us.ibm.com> -# Copyright (C) 2006 XenSource Ltd +# Copyright (C) 2006 XenSource Ltd. #============================================================================ +import xmlrpclib + from xen.xend import XendDomain, XendDomainInfo, XendNode, \ XendLogging, XendDmesg from xen.util.xmlrpclib2 import UnixXMLRPCServer, TCPXMLRPCServer -from xen.xend.XendClient import XML_RPC_SOCKET +from xen.xend.XendClient import XML_RPC_SOCKET, ERROR_INVALID_DOMAIN def lookup(domid): - return XendDomain.instance().domain_lookup_by_name_or_id(domid) + try: + return XendDomain.instance().domain_lookup_by_name_or_id(domid) + except exn: + log.exception(exn) + raise exn def dispatch(domid, fn, args): info = lookup(domid) - return getattr(info, fn)(*args) + if info: + try: + return getattr(info, fn)(*args) + except exn: + log.exception(exn) + raise exn + else: + raise xmlrpclib.Fault(ERROR_INVALID_DOMAIN, domid) def domain(domid): info = lookup(domid) - return info.sxpr() + if info: + try: + return info.sxpr() + except exn: + log.exception(exn) + raise exn + else: + raise xmlrpclib.Fault(ERROR_INVALID_DOMAIN, domid) def domains(detail=1): if detail < 1: diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index d3cab93452..6bb09b29f6 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -1,6 +1,6 @@ # (C) Copyright IBM Corp. 2005 # Copyright (C) 2004 Mike Wray -# Copyright (c) 2005 XenSource Ltd +# Copyright (c) 2005-2006 XenSource Ltd. # # Authors: # Sean Dague <sean at dague dot net> @@ -38,7 +38,7 @@ from xen.xend import sxp from xen.xm.opts import * import console - +import xen.xend.XendClient from xen.xend.XendClient import server # getopt.gnu_getopt is better, but only exists in Python 2.3+. Use @@ -1111,7 +1111,10 @@ def main(argv=sys.argv): except SystemExit: sys.exit(1) except xmlrpclib.Fault, ex: - print "Error: %s" % ex.faultString + if ex.faultCode == xen.xend.XendClient.ERROR_INVALID_DOMAIN: + print "Error: the domain '%s' does not exist." % ex.faultString + else: + print "Error: %s" % ex.faultString sys.exit(1) except: print "Unexpected error:", sys.exc_info()[0] |