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
