Interface StateMachine

All Known Implementing Classes:
CounterService, CounterStateMachine, ReplicatedStateMachine, ReplStateMachine

public interface StateMachine
Interface of a state machine which stores data in memory. Committed log entries are applied to the state machine.
Since:
0.1
Author:
Bela Ban
  • Method Summary

    Modifier and Type
    Method
    Description
    byte[]
    apply(byte[] data, int offset, int length, boolean serialize_response)
    Applies a command to the state machine.
    void
    Reads the contents of the state machine from an input stream.
    void
    Writes the contents of the state machine to an output stream.
  • Method Details

    • apply

      byte[] apply(byte[] data, int offset, int length, boolean serialize_response) throws Exception
      Applies a command to the state machine. The contents of the byte[] buffer are interpreted by the state machine. The command could for example be a set(), remove() or clear() command.
      Parameters:
      data - The byte[] buffer
      offset - The offset at which the data starts
      length - The length of the data
      serialize_response - If true, serialize and return the response, else return null
      Returns:
      A serialized response value, or null (e.g. if the method returned void)
      Throws:
      Exception - Thrown on deserialization or other failure
    • readContentFrom

      void readContentFrom(DataInput in) throws Exception
      Reads the contents of the state machine from an input stream.

      This can be the case when an InstallSnapshot RPC is used to bootstrap a new node, or a node that's lagging far behind. The parsing depends on the concrete state machine implementation, but the idea is that the stream is a sequence of commands, each of which can be passed to apply(byte[], int, int, boolean).

      The state machine may need to block modifications until the contents have been set (unless e.g. copy-on-write is used). The state machine implementation may need to remove all contents before populating itself from the stream.

      Parameters:
      in - The input stream
      Throws:
      Exception
    • writeContentTo

      void writeContentTo(DataOutput out) throws Exception
      Writes the contents of the state machine to an output stream. This is typically called on the leader to provide state to a new node, or a node that's lagging far behind.

      Updates to the state machine may need to be put on hold while the state is written to the output stream.

      Parameters:
      out - The output stream
      Throws:
      Exception