Exemplo n.º 1
0
 def spawn_scout(self):
     assert not self.scout
     self.ballot_num = Ballot(self.viewid, self.ballot_num.n,
                              self.ballot_num.leader)
     sct = self.scout = self.scout_cls(self.member, self, self.ballot_num,
                                       self.peers)
     sct.start()
Exemplo n.º 2
0
 def test_accept_old_ballot(self):
     proposal = Proposal('cli', 123, 'INC')
     cmdid = CommanderId(address='CMD', slot=33, proposal=proposal)
     self.ac.ballot_num = Ballot(10, 10)
     self.node.fake_message('ACCEPT',
                            commander_id=cmdid,
                            ballot_num=Ballot(5, 5),
                            slot=33,
                            proposal=proposal)
     self.assertMessage(
         ['CMD'],
         'ACCEPTED',
         commander_id=cmdid,
         acceptor='F999',
         # replies with newer ballot_num
         ballot_num=Ballot(10, 10))
     # and doesn't accept the proposal
     self.assertState(Ballot(10, 10), {})
Exemplo n.º 3
0
 def test_accept_new_ballot(self):
     proposal = Proposal('cli', 123, 'INC')
     cmdid = CommanderId(address='CMD', slot=33, proposal=proposal)
     self.ac.ballot_num = Ballot(10, 10)
     self.node.fake_message('ACCEPT',
                            commander_id=cmdid,
                            ballot_num=Ballot(19, 19),
                            slot=33,
                            proposal=proposal)
     self.assertMessage(
         ['CMD'],
         'ACCEPTED',
         commander_id=cmdid,
         acceptor='F999',
         # replies with updated ballot_num
         ballot_num=Ballot(19, 19))
     # and state records acceptance of proposal
     self.assertState(Ballot(19, 19), {(Ballot(19, 19), 33): proposal})
Exemplo n.º 4
0
 def __init__(self, member, unique_id, commander_cls=Commander, scout_cls=Scout):
     super(Leader, self).__init__(member)
     self.ballot_num = Ballot(0, unique_id)
     self.active = False
     self.proposals = defaultlist()
     self.commander_cls = commander_cls
     self.commanders = {}
     self.scout_cls = scout_cls
     self.scout = None
     self.peers = None
Exemplo n.º 5
0
 def preempted(self, ballot_num):
     # ballot_num is None when we are preempted by a view change
     if ballot_num:
         self.logger.info("leader preempted by %s" % (ballot_num.leader,))
     else:
         self.logger.info("leader preempted by view change")
     self.active = False
     self.ballot_num = Ballot(
         (ballot_num if ballot_num else self.ballot_num).n + 1, self.ballot_num.leader)
     # if we're the primary for this view, re-scout immediately
     if not self.scout and self.is_primary:
         self.logger.info("re-scouting as the primary for this view")
         self.spawn_scout()
Exemplo n.º 6
0
 def test_prepare_new_ballot(self):
     proposal = Proposal('cli', 123, 'INC')
     self.ac.accepted = {(Ballot(19, 19), 33): proposal}
     self.ac.ballot_num = Ballot(10, 10)
     self.node.fake_message(
         'PREPARE',
         scout_id=ScoutId(address='SC', ballot_num=Ballot(19, 19)),
         # newer than the acceptor's ballot_num
         ballot_num=Ballot(19, 19))
     self.assertMessage(
         ['SC'],
         'PROMISE',
         scout_id=ScoutId(address='SC', ballot_num=Ballot(19, 19)),
         acceptor='F999',
         # replies with updated ballot_num
         ballot_num=Ballot(19, 19),
         # including accepted ballots
         accepted={(Ballot(19, 19), 33): proposal})
     self.assertState(Ballot(19, 19), {(Ballot(19, 19), 33): proposal})
Exemplo n.º 7
0
 def test_prepare_old_ballot(self):
     self.ac.ballot_num = Ballot(10, 10)
     self.node.fake_message(
         'PREPARE',
         scout_id=ScoutId(address='SC', ballot_num=Ballot(5, 10)),
         # older than the acceptor's ballot_num
         ballot_num=Ballot(5, 10))
     self.assertMessage(
         ['SC'],
         'PROMISE',
         scout_id=ScoutId(address='SC', ballot_num=Ballot(5, 10)),
         acceptor='F999',
         # replies with newer ballot_num
         ballot_num=Ballot(10, 10),
         accepted={})
     self.assertState(Ballot(10, 10), {})
Exemplo n.º 8
0
 def __init__(self, member):
     super(Acceptor, self).__init__(member)
     self.ballot_num = Ballot(-1, -1, -1)
     self.accepted = defaultdict()  # { (b,s) : p }