Pārlūkot izejas kodu

Add <EVENT_SERIAL_NUM> to envelope header for events.

Chris McDonough 18 gadi atpakaļ
vecāks
revīzija
6ab7da6039
2 mainītis faili ar 20 papildinājumiem un 8 dzēšanām
  1. 17 5
      src/supervisor/process.py
  2. 3 3
      src/supervisor/tests/test_process.py

+ 17 - 5
src/supervisor/process.py

@@ -570,14 +570,15 @@ class EventListenerPool(ProcessGroupBase):
                                                '%s' % event)
                 self.event_buffer.insert(0, event)
 
-    def _eventEnvelope(self, event_type, payload):
+    def _eventEnvelope(self, event_type, serial, payload):
         event_name = getEventNameByType(event_type)
         payload_len = len(payload)
-        D = {'ver':'3.0',
+        D = {'ver':'SUPERVISORD3.0',
              'len':payload_len,
              'event_name':event_name,
-             'payload':payload}
-        return 'SUPERVISORD%(ver)s %(event_name)s %(len)s\n%(payload)s' % D
+             'payload':payload,
+             'serial':serial}
+        return '%(ver)s %(event_name)s %(serial)s %(len)s\n%(payload)s' % D
 
     def _bufferEvent(self, event):
         if isinstance(event, EventBufferOverflowEvent):
@@ -605,13 +606,16 @@ class EventListenerPool(ProcessGroupBase):
             # this is a system programming error, we must handle
             # all events
             raise NotImplementedError(etype)
+        if not hasattr(event, 'serial'):
+            event.serial = new_serial()
         for process in self.processes.values():
             if process.state != ProcessStates.RUNNING:
                 continue
             if process.listener_state == EventListenerStates.READY:
                 payload = serializer(event)
                 try:
-                    envelope = self._eventEnvelope(event_type, payload)
+                    serial = event.serial
+                    envelope = self._eventEnvelope(event_type, serial, payload)
                     process.write(envelope)
                 except IOError, why:
                     if why[0] != errno.EPIPE:
@@ -625,6 +629,14 @@ class EventListenerPool(ProcessGroupBase):
             self._bufferEvent(event)
         return False
 
+_num = 0
+
+def new_serial():
+    global _num
+    val = _num
+    _num = _num + 1
+    return val
+
 serializers = {}
 def pcomm_event(event):
     return 'process_name: %s\nchannel: %s\n%s' % (

+ 3 - 3
src/supervisor/tests/test_process.py

@@ -1118,9 +1118,9 @@ class EventListenerPoolTests(ProcessGroupBaseTests):
         pool.transition()
         self.assertEqual(process1.transitioned, True)
         self.assertEqual(pool.event_buffer, [])
-        self.assertEqual(
-            process1.stdin_buffer,
-            'SUPERVISORD3.0 STARTING_FROM_STOPPED 22\nprocess_name: process1')
+        buf = process1.stdin_buffer
+        self.assertTrue(buf.startswith('SUPERVISORD3.0 STARTING_FROM_STOPPED '))
+        self.assertTrue(buf.endswith('22\nprocess_name: process1'))
         self.assertEqual(process1.listener_state, EventListenerStates.BUSY)
         self.assertEqual(process1.event, event)