Class DefaultSingleRecoverable
- java.lang.Object
-
- bftsmart.tom.server.defaultservices.DefaultSingleRecoverable
-
- All Implemented Interfaces:
Executable
,Recoverable
,SingleExecutable
- Direct Known Subclasses:
CounterServer
,MapServer
,RecoveryTestServer
,SimpleServiceServer
,ThroughputLatencyServer
public abstract class DefaultSingleRecoverable extends java.lang.Object implements Recoverable, SingleExecutable
This class provides a basic state transfer protocol using the interface 'SingleExecutable'.
-
-
Field Summary
Fields Modifier and Type Field Description protected ReplicaContext
replicaContext
-
Constructor Summary
Constructors Constructor Description DefaultSingleRecoverable()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract byte[]
appExecuteOrdered(byte[] command, MessageContext msgCtx)
Execute a batch of ordered requestsabstract byte[]
appExecuteUnordered(byte[] command, MessageContext msgCtx)
Execute an unordered requestbyte[]
executeOrdered(byte[] command, MessageContext msgCtx)
Method called to execute a request totally ordered.byte[]
executeUnordered(byte[] command, MessageContext msgCtx)
Method called to execute a request totally ordered.abstract byte[]
getSnapshot()
Returns a serialized snapshot of the application stateApplicationState
getState(int cid, boolean sendState)
This method should return a representation of the application stateStateManager
getStateManager()
Recoverers implementing this interface will have to chose among different options of state managers like DurableStateManager or StandardStateManager.abstract void
installSnapshot(byte[] state)
Given a snapshot received from the state transfer protocol, install itvoid
noOp(int CID, byte[][] operations, MessageContext[] msgCtx)
This method is invoked by ServiceReplica to indicate that a consensus instance finished without delivering anything to the application (e.g., an instance only decided a single reconfiguration operation. or an instance where the client operation was not delivered because its view was outdated).void
Op(int CID, byte[] requests, MessageContext msgCtx)
This method is invoked by ServiceReplica to pass information that was decided in a particular consensus instance.void
setClientsManager(ClientsManager clientsManager)
Set the ClientManager objectvoid
setReplicaContext(ReplicaContext replicaContext)
Sets the replica contextint
setState(ApplicationState recvState)
Sets the state to the representation obtained in the state transfer protocol-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface bftsmart.tom.server.Executable
executeUnordered, getTOMMessage
-
Methods inherited from interface bftsmart.tom.server.SingleExecutable
executeOrdered
-
-
-
-
Field Detail
-
replicaContext
protected ReplicaContext replicaContext
-
-
Method Detail
-
executeOrdered
public byte[] executeOrdered(byte[] command, MessageContext msgCtx)
Description copied from interface:SingleExecutable
Method called to execute a request totally ordered. The message context contains a lot of information about the request, such as timestamp, nonces and sender. The code for this method MUST use the value of timestamp instead of relying on its own local clock, and nonces instead of trying to generated its own random values. This is important because this values are the same for all replicas, and therefore, ensure the determinism required in a replicated state machine.- Specified by:
executeOrdered
in interfaceSingleExecutable
- Parameters:
command
- the command issue by the clientmsgCtx
- information related with the command- Returns:
- the reply for the request issued by the client
-
getState
public ApplicationState getState(int cid, boolean sendState)
Description copied from interface:Recoverable
This method should return a representation of the application state- Specified by:
getState
in interfaceRecoverable
- Parameters:
cid
- Consensus up to which the application should return an Application statesendState
- true if the replica should send a complete representation of the state instead of only the hash. False otherwise- Returns:
- A representation of the application state
-
setState
public int setState(ApplicationState recvState)
Description copied from interface:Recoverable
Sets the state to the representation obtained in the state transfer protocol- Specified by:
setState
in interfaceRecoverable
- Parameters:
recvState
- State obtained in the state transfer protocol- Returns:
-
setReplicaContext
public void setReplicaContext(ReplicaContext replicaContext)
Description copied from interface:Recoverable
Sets the replica context- Specified by:
setReplicaContext
in interfaceRecoverable
- Parameters:
replicaContext
- The replica context
-
getStateManager
public StateManager getStateManager()
Description copied from interface:Recoverable
Recoverers implementing this interface will have to chose among different options of state managers like DurableStateManager or StandardStateManager. The recoverer class can also define a new strategy to manage the state and return it in this method.- Specified by:
getStateManager
in interfaceRecoverable
- Returns:
- the implementation of state manager that suplies the strategy defined
-
setClientsManager
public void setClientsManager(ClientsManager clientsManager)
Set the ClientManager object- Specified by:
setClientsManager
in interfaceRecoverable
- Parameters:
clientsManager
- client manager
-
executeUnordered
public byte[] executeUnordered(byte[] command, MessageContext msgCtx)
Description copied from interface:Executable
Method called to execute a request totally ordered. The message context contains some useful information such as the command sender.- Specified by:
executeUnordered
in interfaceExecutable
- Parameters:
command
- the command issue by the clientmsgCtx
- information related with the command- Returns:
- the reply for the request issued by the client
-
Op
public void Op(int CID, byte[] requests, MessageContext msgCtx)
Description copied from interface:Recoverable
This method is invoked by ServiceReplica to pass information that was decided in a particular consensus instance. This method is always invoked before the executor. However, multiple invocations for the same consensus ID may occur, so developers must take this behavior into consideration when developing their own logging and checkpointing. If there is no information to be passed to the application, noOp(...) is invoked instead.- Specified by:
Op
in interfaceRecoverable
- Parameters:
CID
- the consensus instance ID associated with the requestrequests
- A request decided in CIDmsgCtx
- Message context associated with the client request and the consensus instance where it was ordered. msgCtx.getConsensusId() will be equal to CID.
-
noOp
public void noOp(int CID, byte[][] operations, MessageContext[] msgCtx)
Description copied from interface:Recoverable
This method is invoked by ServiceReplica to indicate that a consensus instance finished without delivering anything to the application (e.g., an instance only decided a single reconfiguration operation. or an instance where the client operation was not delivered because its view was outdated). To allow the underlying state transfer protocol to execute correctly, it needs to be notified of this special case In the current protocols included, it suffices to register a NOOP operation in the logs used within the state transfer, but never deliver it to the application- Specified by:
noOp
in interfaceRecoverable
- Parameters:
CID
- the consensus instance where the aforementioned condition occurredoperations
- Operations decided in CIDmsgCtx
- Message context associated with the consensus instance. furthermore msgCtx.getConsensusId() will be equal to CID.
-
installSnapshot
public abstract void installSnapshot(byte[] state)
Given a snapshot received from the state transfer protocol, install it- Parameters:
state
- The serialized snapshot
-
getSnapshot
public abstract byte[] getSnapshot()
Returns a serialized snapshot of the application state- Returns:
- A serialized snapshot of the application state
-
appExecuteOrdered
public abstract byte[] appExecuteOrdered(byte[] command, MessageContext msgCtx)
Execute a batch of ordered requests- Parameters:
command
- The ordered requestmsgCtx
- The context associated to each request- Returns:
- the reply for the request issued by the client
-
appExecuteUnordered
public abstract byte[] appExecuteUnordered(byte[] command, MessageContext msgCtx)
Execute an unordered request- Parameters:
command
- The unordered requestmsgCtx
- The context associated to the request- Returns:
- the reply for the request issued by the client
-
-