package lsr.paxos.core; import lsr.paxos.messages.PrepareOK; public interface Proposer { public enum ProposerState { INACTIVE, PREPARING, PREPARED } public void start(); public ProposerState getState(); public void ballotFinished(); public void stopProposer(); public void onPrepareOK(PrepareOK msg, int sender); public void propose(byte[] value); public void prepareNextView(); /** * After reception of majority accepts, we suppress propose messages. * * @param instanceId no. of instance, for which we want to stop * retransmission */ public void stopPropose(int instanceId); /** * If retransmission to some process for certain instance is no longer * needed, we should stop it * * @param instanceId no. of instance, for which we want to stop * retransmission * @param destination number of the process in processes PID list */ public void stopPropose(int instanceId, int destination); interface Task { void onPrepared(); void onFailedToPrepare(); } /** * Schedules a task to be executed as soon as the proposer is prepared */ public void executeOnPrepared(final Task task); }