示例#1
0
 def _process_event(self, event):
     event = Event.from_map(event)
     current_status = self.__get_member_status(event.node)
     if not current_status:
         return
     if event.event == 'alive':
         if (current_status.status == 'suspect'
                 and event.incarnation > current_status.incarnation):
             self.events.append(event)
             new_status = NodeStatus.from_event(event)
             self.__set_member_status(event.node, new_status)
         elif (current_status == 'alive'
               and event.incarnation > current_status.incarnation):
             self.events.append(event)
             new_status = NodeStatus.from_event(event)
             self.__set_member_status(event.node, new_status)
     elif event.event == 'suspect':
         if event.node == self.name:
             self.__incarnation += 1
             self.events.append(
                 Event('alive', self.name, self.__incarnation))
         elif (current_status.status == 'suspect'
               and event.incarnation > current_status.incarnation):
             self.events.append(event)
             new_status = NodeStatus.from_event(event)
             self.__set_member_status(event.node, new_status)
         elif (current_status.status == 'alive'
               and event.incarnation >= current_status.incarnation):
             self.events.append(event)
             new_status = NodeStatus.from_event(event)
             self.__set_member_status(event.node, new_status)
     elif event.event == 'dead':
         if event.node == self.name:
             self.__incarnation += 1
             self.events.append(
                 Event('alive', self.name, self.__incarnation))
         elif event.incarnation >= current_status.incarnation:
             self.events.append(event)
             self._handle_node_down(event.node)
     elif (event.event == 'join' and self.name != event.node
           and event.node not in self.node_status):
         self.events.append(event)
         self._handle_node_join(self, event.node)