The socket.family attribute is not defined in python 2.4 and below.
Work around it.

Signed-off-by: Guido Trotter <[email protected]>
---
 daemons/ganeti-masterd         |   12 ++++++++----
 lib/daemon.py                  |    9 +++++++--
 test/ganeti.daemon_unittest.py |    7 ++++---
 3 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/daemons/ganeti-masterd b/daemons/ganeti-masterd
index b46994c..8c48449 100755
--- a/daemons/ganeti-masterd
+++ b/daemons/ganeti-masterd
@@ -96,10 +96,11 @@ class 
MasterClientHandler(daemon.AsyncTerminatedMessageStream):
   """Handler for master peers.
 
   """
-  def __init__(self, server, connected_socket, client_address):
+  def __init__(self, server, connected_socket, client_address, family):
     daemon.AsyncTerminatedMessageStream.__init__(self, connected_socket,
                                                  client_address,
-                                                 constants.LUXI_EOM)
+                                                 constants.LUXI_EOM,
+                                                 family)
     self.server = server
 
   def handle_message(self, message):
@@ -113,6 +114,9 @@ class MasterServer(daemon.AsyncStreamServer):
   master socket.
 
   """
+
+  family = socket.AF_UNIX
+
   def __init__(self, mainloop, address):
     """MasterServer constructor
 
@@ -121,7 +125,7 @@ class MasterServer(daemon.AsyncStreamServer):
     @param address: the unix socket address to bind the MasterServer to
 
     """
-    daemon.AsyncStreamServer.__init__(self, socket.AF_UNIX, address)
+    daemon.AsyncStreamServer.__init__(self, self.family, address)
     self.mainloop = mainloop
 
     # We'll only start threads once we've forked.
@@ -129,7 +133,7 @@ class MasterServer(daemon.AsyncStreamServer):
     self.request_workers = None
 
   def handle_connection(self, connected_socket, client_address):
-    MasterClientHandler(self, connected_socket, self.family, client_address)
+    MasterClientHandler(self, connected_socket, client_address, self.family)
 
   def setup_queue(self):
     self.context = GanetiContext()
diff --git a/lib/daemon.py b/lib/daemon.py
index f462e43..ebfbd31 100644
--- a/lib/daemon.py
+++ b/lib/daemon.py
@@ -166,7 +166,7 @@ class AsyncTerminatedMessageStream(asynchat.async_chat):
   separator. For each complete message handle_message is called.
 
   """
-  def __init__(self, connected_socket, peer_address, terminator):
+  def __init__(self, connected_socket, peer_address, terminator, family):
     """AsyncTerminatedMessageStream constructor.
 
     @type connected_socket: socket.socket
@@ -174,13 +174,18 @@ class AsyncTerminatedMessageStream(asynchat.async_chat):
     @param peer_address: family-specific peer address
     @type terminator: string
     @param terminator: terminator separating messages in the stream
+    @type family: integer
+    @param family: socket family
 
     """
     # python 2.4/2.5 uses conn=... while 2.6 has sock=... we have to cheat by
     # using a positional argument rather than a keyword one.
     asynchat.async_chat.__init__(self, connected_socket)
     self.connected_socket = connected_socket
-    self.family = self.connected_socket.family
+    # on python 2.4 there is no "family" attribute for the socket class
+    # FIXME: when we move to python 2.5 or above remove the family parameter
+    #self.family = self.connected_socket.family
+    self.family = family
     self.peer_address = peer_address
     self.terminator = terminator
     self.set_terminator(terminator)
diff --git a/test/ganeti.daemon_unittest.py b/test/ganeti.daemon_unittest.py
index 779f7ed..9dd1bc6 100755
--- a/test/ganeti.daemon_unittest.py
+++ b/test/ganeti.daemon_unittest.py
@@ -255,11 +255,11 @@ class _MyAsyncStreamServer(daemon.AsyncStreamServer):
 
 class _MyMessageStreamHandler(daemon.AsyncTerminatedMessageStream):
 
-  def __init__(self, connected_socket, client_address, terminator,
+  def __init__(self, connected_socket, client_address, terminator, family,
                message_fn, client_id):
     daemon.AsyncTerminatedMessageStream.__init__(self, connected_socket,
                                                  client_address,
-                                                 terminator)
+                                                 terminator, family)
     self.message_fn = message_fn
     self.client_id = client_id
     self.error_count = 0
@@ -316,7 +316,8 @@ class TestAsyncStreamServerTCP(testutils.GanetiTestCase):
     client_id = self.next_client_id
     self.next_client_id += 1
     client_handler = self.client_handler(connected_socket, client_address,
-                                         self.terminator, self.handle_message,
+                                         self.terminator, self.family,
+                                         self.handle_message,
                                          client_id)
     self.connections.append(client_handler)
     self.countTerminate("connect_terminate_count")
-- 
1.7.1

Reply via email to