From b11780bba16a8aff96439b0acb04e20b90b983b5 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Thu, 13 May 2010 18:32:25 +0100 Subject: [PATCH] daemon.GanetiBaseAsyncoreDispatcher Abstract a few common functionalities between all ganeti asyncore dispatchers: - Handle errors by logging them, and then continue - By default check sockets only for readability Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Iustin Pop <iustin@google.com> --- lib/daemon.py | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/lib/daemon.py b/lib/daemon.py index 06cd70c2c..d4989f7dd 100644 --- a/lib/daemon.py +++ b/lib/daemon.py @@ -72,7 +72,26 @@ class AsyncoreScheduler(sched.scheduler): sched.scheduler.__init__(self, timefunc, AsyncoreDelayFunction) -class AsyncUDPSocket(asyncore.dispatcher): +class GanetiBaseAsyncoreDispatcher(asyncore.dispatcher): + """Base Ganeti Asyncore Dispacher + + """ + # this method is overriding an asyncore.dispatcher method + def handle_error(self): + """Log an error in handling any request, and proceed. + + """ + logging.exception("Error while handling asyncore request") + + # this method is overriding an asyncore.dispatcher method + def writable(self): + """Most of the time we don't want to check for writability. + + """ + return False + + +class AsyncUDPSocket(GanetiBaseAsyncoreDispatcher): """An improved asyncore udp socket. """ @@ -80,7 +99,7 @@ class AsyncUDPSocket(asyncore.dispatcher): """Constructor for AsyncUDPSocket """ - asyncore.dispatcher.__init__(self) + GanetiBaseAsyncoreDispatcher.__init__(self) self._out_queue = [] self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) @@ -119,13 +138,6 @@ class AsyncUDPSocket(asyncore.dispatcher): utils.IgnoreSignals(self.sendto, payload, 0, (ip, port)) self._out_queue.pop(0) - # this method is overriding an asyncore.dispatcher method - def handle_error(self): - """Log an error in handling any request, and proceed. - - """ - logging.exception("Error while handling asyncore request") - def enqueue_send(self, ip, port, payload): """Enqueue a datagram to be sent when possible -- GitLab