package lsr.paxos;
import java.util.BitSet;
import lsr.common.ProcessDescriptor;
import lsr.paxos.messages.Prepare;
import lsr.paxos.messages.PrepareOK;
/**
* Simple implementation of <code>PrepareRetransmitter</code> interface. It is
* using the <code>ActiveRetransmitter</code> class and retransmits only to
* processes that <code>PrepareOk</code> response has not been received.
*/
public final class PrepareRetransmitterImpl implements PrepareRetransmitter {
private final ActiveRetransmitter retransmitter;
private RetransmittedMessage prepareRetransmitter;
private BitSet prepared = new BitSet();
public PrepareRetransmitterImpl(ActiveRetransmitter retransmitter) {
this.retransmitter = retransmitter;
}
public void startTransmitting(Prepare prepare, BitSet acceptor) {
prepared.clear();
prepareRetransmitter = retransmitter.startTransmitting(prepare, acceptor);
}
public void stop() {
prepareRetransmitter.stop();
}
public void update(PrepareOK message, int sender) {
prepared.set(sender);
prepareRetransmitter.stop(sender);
}
public boolean isMajority() {
return prepared.cardinality() > ProcessDescriptor.processDescriptor.numReplicas / 2;
}
}