aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoranthony@rhesis.austin.ibm.com <anthony@rhesis.austin.ibm.com>2006-03-24 14:31:12 +0100
committeranthony@rhesis.austin.ibm.com <anthony@rhesis.austin.ibm.com>2006-03-24 14:31:12 +0100
commit76e09e82387ec2eef675ae705348f655586b7bb3 (patch)
treefbcb673585725ae3b56e703c502e6b016b83724c
parent3e0dfe69c98490d48b9706ec028756266a6af155 (diff)
downloadxen-76e09e82387ec2eef675ae705348f655586b7bb3.tar.gz
xen-76e09e82387ec2eef675ae705348f655586b7bb3.tar.bz2
xen-76e09e82387ec2eef675ae705348f655586b7bb3.zip
1) Introduce new exception type XendInvalidDomain that maps to the high level
XEND_INVALID_DOMAIN faultType. 2) Fix exception logic in XMLRPCServer 3) Fix TCP server 4) Remove catching of ProtocolError in main.py. ProtocolErrors only occur when there is an exception in the exception handling code which shouldn't ever happen. I've reproduced the error cases described by Ewan with xend_domain_setTargetMemory and once I fixed the exception logic, I get a normal faultType of 1 as would be expected. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
-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.py6
3 files changed, 12 insertions, 28 deletions
diff --git a/tools/python/xen/xend/XendError.py b/tools/python/xen/xend/XendError.py
index efe7fe5e32..f78a71f031 100644
--- a/tools/python/xen/xend/XendError.py
+++ b/tools/python/xen/xend/XendError.py
@@ -19,6 +19,10 @@ from xmlrpclib import Fault
import XendClient
+class XendInvalidDomain(Fault):
+ def __init__(self, value):
+ Fault.__init__(self, XendClient.ERROR_INVALID_DOMAIN, value)
+
class XendError(Fault):
def __init__(self, value):
diff --git a/tools/python/xen/xend/server/XMLRPCServer.py b/tools/python/xen/xend/server/XMLRPCServer.py
index 1e553a84e3..7d03cfb3dc 100644
--- a/tools/python/xen/xend/server/XMLRPCServer.py
+++ b/tools/python/xen/xend/server/XMLRPCServer.py
@@ -23,35 +23,21 @@ from xen.xend import XendDomain, XendDomainInfo, XendNode, \
from xen.util.xmlrpclib2 import UnixXMLRPCServer, TCPXMLRPCServer
from xen.xend.XendClient import XML_RPC_SOCKET, ERROR_INVALID_DOMAIN
+from xen.xend.XendError import *
def lookup(domid):
- try:
- return XendDomain.instance().domain_lookup_by_name_or_id(domid)
- except exn:
- log.exception(exn)
- raise exn
+ info = XendDomain.instance().domain_lookup_by_name_or_id(domid)
+ if not info:
+ raise XendInvalidDomain(str(domid))
+ return info
def dispatch(domid, fn, args):
info = lookup(domid)
- if info:
- try:
- return getattr(info, fn)(*args)
- except exn:
- log.exception(exn)
- raise exn
- else:
- raise xmlrpclib.Fault(ERROR_INVALID_DOMAIN, domid)
+ return getattr(info, fn)(*args)
def domain(domid):
info = lookup(domid)
- if info:
- try:
- return info.sxpr()
- except exn:
- log.exception(exn)
- raise exn
- else:
- raise xmlrpclib.Fault(ERROR_INVALID_DOMAIN, domid)
+ return info.sxpr()
def domains(detail=1):
if detail < 1:
@@ -90,7 +76,7 @@ class XMLRPCServer:
if self.use_tcp:
# bind to something fixed for now as we may eliminate
# tcp support completely.
- self.server = TCPXMLRPCServer(("localhost", 8005, False))
+ self.server = TCPXMLRPCServer(("localhost", 8005), logRequests=False)
else:
self.server = UnixXMLRPCServer(XML_RPC_SOCKET, False)
diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py
index 6bb09b29f6..a636dd5e84 100644
--- a/tools/python/xen/xm/main.py
+++ b/tools/python/xen/xm/main.py
@@ -1102,12 +1102,6 @@ def main(argv=sys.argv):
else:
err("Error connecting to xend: %s." % ex[1])
sys.exit(1)
- except xmlrpclib.ProtocolError, ex:
- if os.geteuid() != 0:
- err("Most commands need root access. Please try again as root.")
- else:
- err("Error connecting to xend: %s." % ex.errmsg)
- sys.exit(1)
except SystemExit:
sys.exit(1)
except xmlrpclib.Fault, ex: