def msg_propose_reject(self, conn, msg):
        """MSG_PROPOSE_REJECT is handled only if it belongs to an outstanding MSG_PROPOSE,
        otherwise it is discarded.
        A MSG_PROPOSE_REJECT causes the PROPOSE STAGE to be unsuccessful, hence the current
        state is deleted and a new PREPARE STAGE is initialized.

        State Updates:
        - kill the PROPOSE STAGE that received a MSG_PROPOSE_REJECT
        -- remove the old ResponseCollector from the outstanding prepare set
        - remove the command from proposals, add it to pendingcommands
        - update the ballotnumber
        - initiate command
        """
        if self.outstandingproposes in msg.commandnumber:
            prc = self.outstandingproposes[msg.commandnumber]
            if msg.inresponseto == prc.ballotnumber:
                if self.debug: self.logger.write("Paxos State",
                                                 "got a reject for proposal ballotno %s "\
                                                 "commandno %s proposal %s still %d "\
                                                 "out of %d accepts" % \
                                                 (prc.ballotnumber, prc.commandnumber,
                                                  prc.proposal, prc.receivedcount, prc.ntotal))
                # take this response collector out of the outstanding propose set
                del self.outstandingproposes[msg.commandnumber]
                # become inactive
                self.active = False
                # handle reject
                self._handlereject(msg, prc)
dataset/ETHPy150Open denizalti/concoord/concoord/replica.py/Replica.msg_propose_reject/swapped operands of `in`