aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>2006-03-23 12:59:43 +0100
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>2006-03-23 12:59:43 +0100
commit88aea7e5a858e5489df0d50ad2b0459ba17354d2 (patch)
treed3ef8ae36b28a4e79b275a37317ae35537bd2eef
parent91c4832c4909b0066debdb6dd066951662199a21 (diff)
downloadxen-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.py4
-rw-r--r--tools/python/xen/xend/XendError.py4
-rw-r--r--tools/python/xen/xend/server/XMLRPCServer.py30
-rw-r--r--tools/python/xen/xm/main.py9
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]