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"