package lsr.paxos;
import java.util.BitSet;
import lsr.paxos.messages.Prepare;
import lsr.paxos.messages.PrepareOK;
/**
* Represents the retransmitter of <code>Prepare</code> message used by
* proposer. This retransmitter decided to which processes the
* <code>Prepare</code> message should be sent based on <code>PrepareOk</code>
* responses from other processes.
*/
public interface PrepareRetransmitter {
/**
* Starts transmitting specified <code>Prepare</code> message to given
* acceptors processes.
*
* @param prepare - the prepare message to retransmit
* @param acceptor - the set of processes to send <code>Prepare</code>
* message to
*/
void startTransmitting(Prepare prepare, BitSet acceptor);
/**
* Stops retransmitting of <code>Prepare</code> message.
*/
void stop();
/**
* Updates list of processes to sent <code>Prepare</code> message based on
* the <code>PrepareOk</code> response.
*
* @param message - the <code>PrepareOk</code> response
* @param sender - the id of process which sent the response
*/
void update(PrepareOK message, int sender);
/**
* Returns true if the majority of processes had responded with
* <code>PrepareOk</code>.
*
* @return true if the majority had responded; false otherwise
*/
boolean isMajority();
}