aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>2006-03-30 11:51:44 +0100
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>2006-03-30 11:51:44 +0100
commitc705b05a310d753c900aa76fff6f3e9cb3e37769 (patch)
tree668c335a0169367bc8b34ecb8783701829ebec37
parent919a239a3c8f70cdb6963f76787588bd7a2a17a7 (diff)
downloadxen-c705b05a310d753c900aa76fff6f3e9cb3e37769.tar.gz
xen-c705b05a310d753c900aa76fff6f3e9cb3e37769.tar.bz2
xen-c705b05a310d753c900aa76fff6f3e9cb3e37769.zip
Fix the ProtocolError seen when the server throws an exception and running
under Python 2.3; traceback.format_exc was introduced in 2.4, so we can't use it. Added some exception logging. Signed-off-by: Ewan Mellor <ewan@xensource.com>
-rw-r--r--tools/python/xen/util/xmlrpclib2.py15
1 files changed, 9 insertions, 6 deletions
diff --git a/tools/python/xen/util/xmlrpclib2.py b/tools/python/xen/util/xmlrpclib2.py
index 538cbd8a95..214a678fac 100644
--- a/tools/python/xen/util/xmlrpclib2.py
+++ b/tools/python/xen/util/xmlrpclib2.py
@@ -23,9 +23,13 @@ An enhanced XML-RPC client/server interface for Python.
from httplib import HTTPConnection, HTTP
from xmlrpclib import Transport
from SimpleXMLRPCServer import SimpleXMLRPCServer, SimpleXMLRPCRequestHandler
-import xmlrpclib, socket, os, traceback
+import xmlrpclib, socket, os
import SocketServer
+import xen.xend.XendClient
+from xen.xend.XendLogging import log
+
+
# A new ServerProxy that also supports httpu urls. An http URL comes in the
# form:
#
@@ -60,8 +64,7 @@ class ServerProxy(xmlrpclib.ServerProxy):
verbose, allow_none)
# This is a base XML-RPC server for TCP. It sets allow_reuse_address to
-# true, and has an improved marshaller that serializes unknown exceptions
-# with full traceback information.
+# true, and has an improved marshaller that logs and serializes exceptions.
class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer):
allow_reuse_address = True
@@ -80,10 +83,10 @@ class TCPXMLRPCServer(SocketServer.ThreadingMixIn, SimpleXMLRPCServer):
allow_none=1)
except xmlrpclib.Fault, fault:
response = xmlrpclib.dumps(fault)
- except:
+ except Exception, exn:
+ log.exception(exn)
response = xmlrpclib.dumps(
- xmlrpclib.Fault(1, traceback.format_exc())
- )
+ xmlrpclib.Fault(xen.xend.XendClient.ERROR_INTERNAL, str(exn)))
return response