Пример #1
0
    def on_view_change_event(self, slot, viewid, peers):
        self.viewid = viewid
        self.peers = peers
        self.is_primary = view_primary(viewid, peers) == self.address

        # we are not an active leader in this new view
        if self.scout:
            self.scout.finished(None, None)  # eventually calls preempted
        elif self.active:
            self.preempted(None)
        elif self.is_primary:
            self.spawn_scout()
Пример #2
0
 def propose(self, proposal, slot=None):
     if not slot:
         slot = self.next_slot
         self.next_slot += 1
     self.proposals[slot] = proposal
     # find a leader we think is working, deterministically
     leaders = [view_primary(self.viewid, self.peers)] + \
         list(self.peers)
     leader = (l for l in leaders if l not in self.peers_down).next()
     self.logger.info("proposing %s at slot %d to leader %s" %
                      (proposal, slot, leader))
     self.send([leader], 'PROPOSE', slot=slot, proposal=proposal)
Пример #3
0
 def on_view_change_event(self, viewchange):
     self.peers = viewchange.peers
     is_primary = view_primary(viewchange.viewid, viewchange.peers) == self.address
     self.is_primary = is_primary
     if is_primary:
         if not self.scout and not self.active:
             self.spawn_scout()
     else:
         if self.scout:
             self.scout.finished(False, None)
             # .. which eventually calls self.preempted
         elif self.active:
             self.preempted(None)