package lsr.paxos.messages;
import java.io.DataInputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
/**
* Represents request to prepare consensus instances higher or equal to
* <code>firstUncommitted</code>.
*
* @param view - the view being prepared
* @param firstUncommitted - the first consensus instance for which this process
* doesn't know the decision.
*/
public final class Prepare extends Message {
private static final long serialVersionUID = 1L;
private final int firstUncommitted;
/**
* Creates new <code>Prepare</code> message. This is request to preparing
* new view number.
*
* @param view - the view being prepared
* @param firstUncommitted - the first consensus instance for which sender
* process doesn't know the decision
*/
public Prepare(int view, int firstUncommitted) {
super(view);
this.firstUncommitted = firstUncommitted;
}
/**
* Creates new <code>Prepare</code> message from serialized stream.
*
* @param input - the input stream with serialized message inside
* @throws IOException if I/O error occurs
*/
public Prepare(DataInputStream input) throws IOException {
super(input);
firstUncommitted = input.readInt();
}
/**
* Returns id of first consensus instance sender does not know the decision
* for.
*
* @return id of first uncommitted consensus instance
*/
public int getFirstUncommitted() {
return firstUncommitted;
}
public MessageType getType() {
return MessageType.Prepare;
}
public int byteSize() {
return super.byteSize() + 4;
}
public String toString() {
return "Prepare(" + super.toString() + ", firstUncommitted: " + firstUncommitted + ")";
}
protected void write(ByteBuffer bb) {
bb.putInt(firstUncommitted);
}
}