Move fourcc packing/unpacking to main confd module
[ganeti-local] / daemons / ganeti-confd
index c08426e..22e1637 100755 (executable)
@@ -43,6 +43,7 @@ from ganeti import daemon
 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):
@@ -69,9 +70,18 @@ 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):