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()
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)
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)