from ganeti import ssconf
from ganeti.asyncnotifier import AsyncNotifier
from ganeti.confd.server import ConfdProcessor
+from ganeti.confd import PackMagic, UnpackMagic
class ConfdAsyncUDPServer(daemon.AsyncUDPSocket):
# this method is overriding a daemon.AsyncUDPSocket method
def handle_datagram(self, payload_in, ip, port):
- payload_out = self.processor.ExecQuery(payload_in, ip, port)
- if payload_out is not None:
- self.enqueue_send(ip, port, payload_out)
+ try:
+ query = UnpackMagic(payload_in)
+ except errors.ConfdMagicError, err:
+ logging.debug(err)
+ return
+
+ answer = self.processor.ExecQuery(query, ip, port)
+ if answer is not None:
+ try:
+ self.enqueue_send(ip, port, PackMagic(answer))
+ except errors.UdpDataSizeError:
+ logging.error("Reply too big to fit in an udp packet.")
class ConfdInotifyEventHandler(pyinotify.ProcessEvent):