This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


Re: [Xen-devel] Re: xm list problem with python 2.7

On Wed, 18 Aug 2010, Ian Jackson wrote:

M A Young writes ("[Xen-devel] Re: xm list problem with python 2.7"):
On Sat, 7 Aug 2010, M A Young wrote:
If I try xm list (with xen-4.0.0) I get the following traceback

Unexpected error: <type 'exceptions.AttributeError'>
AttributeError: HTTPUnix instance has no attribute 'getresponse'

I eventually tracked this down to xmlrpc changes in python 2.7 .

Thanks for looking into this.  How irritating.

  The patch below fixes the xm problem, and a xend problem serving
xmlrpc. Note that the first part won't work as written with earlier
versions of python, though the second part is probably safe as
disable_nagle_algorithm was introduced in python 2.7.

Hrm.  Would you care to suggest a patch that should work for earlier
versions of python too ?  We can't really do something that breaks
everything before 2.7.  (I would say that we probably still support
back to 2.4 at least.)

Here is revised patch. I have tested it (without comments) in python 2.6 and 2.7 and should work in earlier versions.

Signed-off-by: Michael Young <m.a.young@xxxxxxxxxxxx>

--- xen-4.0.1/tools/python/xen/util/xmlrpcclient.py.orig        2010-02-02 
20:43:01.000000000 +0000
+++ xen-4.0.1/tools/python/xen/util/xmlrpcclient.py     2010-08-18 
21:36:05.000000000 +0100
@@ -22,6 +22,7 @@
 import string
 import xmlrpclib
 from types import StringTypes
+from sys import hexversion

@@ -54,7 +55,12 @@
         return xmlrpclib.Transport.request(self, host, '/RPC2',
                                            request_body, verbose)
     def make_connection(self, host):
-        return HTTPUnix(self.__handler)
+        if hexversion < 0x02070000:
+            # python 2.6 or earlier
+            return HTTPUnix(self.__handler)
+        else:
+            # xmlrpclib.Transport changed in python 2.7
+            return HTTPUnixConnection(self.__handler)

 # We need our own transport for HTTPS, because xmlrpclib.SafeTransport is
--- xen-4.0.1/tools/python/xen/util/xmlrpclib2.py.orig  2010-02-02 
20:43:01.000000000 +0000
+++ xen-4.0.1/tools/python/xen/util/xmlrpclib2.py       2010-08-18 
21:35:40.000000000 +0100
@@ -58,6 +58,9 @@
 # some bugs in Keep-Alive handling and also enabled it by default
 class XMLRPCRequestHandler(SimpleXMLRPCRequestHandler):
     protocol_version = "HTTP/1.1"
+    # xend crashes in python 2.7 unless disable_nagle_algorithm = False
+    # it isn't used in earlier versions so it is harmless to set it generally
+    disable_nagle_algorithm = False

     def __init__(self, hosts_allowed, request, client_address, server):
         self.hosts_allowed = hosts_allowed

Xen-devel mailing list