class Acceptor(Process): def __init__(self, env, me): Process.__init__(self) self.ballot_number = None self.accepted = PValueSet() self.me = me self.env = env self.env.addProc(self) def body(self): print "Here I am: ", self.me while True: msg = self.getNextMessage() if isinstance(msg, P1aMessage): if (self.ballot_number == None or msg.ballot_number > self.ballot_number): self.ballot_number = msg.ballot_number self.sendMessage( msg.src, P1bMessage(self.me, self.ballot_number, self.accepted)) elif isinstance(msg, P2aMessage): if (self.ballot_number == None or msg.ballot_number >= self.ballot_number): self.ballot_number = msg.ballot_number self.accepted.add( PValue(msg.ballot_number, msg.slot_number, msg.command)) self.sendMessage( msg.src, P2bMessage(self.me, self.ballot_number, msg.slot_number))
def __init__(self, env, me): Process.__init__(self) self.ballot_number = None self.accepted = PValueSet() self.me = me self.env = env self.env.addProc(self)
def body(self): waitfor = set() for a in self.acceptors: self.sendMessage(a, P1aMessage(self.me, self.ballot_number)) waitfor.add(a) pvalues = PValueSet() while True: msg = self.getNextMessage() if isinstance(msg, P1bMessage): if self.ballot_number == msg.ballot_number and msg.src in waitfor: pvalues.update(msg.accepted) waitfor.remove(msg.src) if (2 * len(waitfor)) > len(self.acceptors): self.sendMessage(self.leader, AdoptedMessage(self.me, self.ballot_number, pvalues)) return else: self.sendMessage(self.leader, PreemptedMessage(self.me, msg.ballot_number)) return else: print "Scout: unexpected msg"
class Acceptor(Process): def __init__(self, env, me): Process.__init__(self) self.ballot_number = None self.accepted = PValueSet() self.me = me self.env = env self.env.addProc(self) def body(self): print "Here I am: ", self.me while True: msg = self.getNextMessage() if isinstance(msg, P1aMessage): if (self.ballot_number == None or msg.ballot_number > self.ballot_number): self.ballot_number = msg.ballot_number self.sendMessage(msg.src, P1bMessage(self.me, self.ballot_number, self.accepted)) elif isinstance(msg, P2aMessage): if (self.ballot_number == None or msg.ballot_number >= self.ballot_number): self.ballot_number = msg.ballot_number self.accepted.add(PValue(msg.ballot_number, msg.slot_number, msg.command)) self.sendMessage(msg.src, P2bMessage(self.me, self.ballot_number, msg.slot_number))