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)
Exemple #3
0
 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)
Exemple #4
0
  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"
Exemple #5
0
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))