Class ConsensusNode

java.lang.Object
org.j7m.middleware.consensus.ConsensusNode
All Implemented Interfaces:
AutoCloseable

public final class ConsensusNode extends Object implements AutoCloseable
Single deterministic Raft-like node.
  • Constructor Summary

    Constructors
    Constructor
    Description
    ConsensusNode(org.j7m.middleware.api.consensus.ConsensusConfiguration configuration, org.j7m.middleware.api.consensus.ConsensusNodeId nodeId, Path storageRoot, org.j7m.middleware.consensus.ConsensusMetrics metrics)
    Creates and recovers a node.
  • Method Summary

    Modifier and Type
    Method
    Description
    org.j7m.middleware.api.consensus.ConsensusLogEntry
    appendLeaderCommand(org.j7m.middleware.api.consensus.ConsensusCommand command)
    Appends a command on the leader.
    org.j7m.middleware.api.consensus.AppendEntriesRequest
    appendRequestFor(org.j7m.middleware.api.consensus.ConsensusNodeId follower)
    Creates append request for one follower.
    List<org.j7m.middleware.api.consensus.ConsensusLogEntry>
    Returns applied entries.
    void
    long
    Returns current commit index.
    void
    Marks this node crashed.
    boolean
    Returns whether this node is crashed.
    boolean
    Returns whether leader append-only has held for this node.
    List<org.j7m.middleware.api.consensus.ConsensusLogEntry>
    Returns log entries.
    org.j7m.middleware.api.consensus.ConsensusNodeId
    Returns node id.
    org.j7m.middleware.api.consensus.AppendEntriesResponse
    onAppendEntries(org.j7m.middleware.api.consensus.AppendEntriesRequest request)
    Handles AppendEntries.
    boolean
    onAppendEntriesResponse(org.j7m.middleware.api.consensus.AppendEntriesResponse response)
    Handles AppendEntries response.
    org.j7m.middleware.api.consensus.RequestVoteResponse
    onRequestVote(org.j7m.middleware.api.consensus.RequestVoteRequest request)
    Handles a vote request.
    onRequestVoteResponse(org.j7m.middleware.api.consensus.RequestVoteResponse response)
    Handles a vote response and returns any leader heartbeats when leadership is won.
    Returns all follower append messages.
    Restores this node process after durable recovery by replacing volatile state.
    org.j7m.middleware.api.consensus.ConsensusRole
    Returns current role.
    Starts an election and returns vote request messages.
    org.j7m.middleware.api.consensus.ConsensusState
    Returns state snapshot.
    org.j7m.middleware.api.consensus.ConsensusTerm
    Returns current term.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ConsensusNode

      public ConsensusNode(org.j7m.middleware.api.consensus.ConsensusConfiguration configuration, org.j7m.middleware.api.consensus.ConsensusNodeId nodeId, Path storageRoot, org.j7m.middleware.consensus.ConsensusMetrics metrics)
      Creates and recovers a node.
      Parameters:
      configuration - group configuration
      nodeId - node id
      storageRoot - storage root
      metrics - shared metrics
  • Method Details

    • nodeId

      public org.j7m.middleware.api.consensus.ConsensusNodeId nodeId()
      Returns node id.
      Returns:
      node id
    • crashed

      public boolean crashed()
      Returns whether this node is crashed.
      Returns:
      true when crashed
    • crash

      public void crash()
      Marks this node crashed.
    • restart

      public ConsensusNode restart()
      Restores this node process after durable recovery by replacing volatile state.
      Returns:
      recovered node
    • startElection

      public List<ConsensusMessage> startElection()
      Starts an election and returns vote request messages.
      Returns:
      outgoing messages
    • onRequestVote

      public org.j7m.middleware.api.consensus.RequestVoteResponse onRequestVote(org.j7m.middleware.api.consensus.RequestVoteRequest request)
      Handles a vote request.
      Parameters:
      request - request
      Returns:
      response
    • onRequestVoteResponse

      public List<ConsensusMessage> onRequestVoteResponse(org.j7m.middleware.api.consensus.RequestVoteResponse response)
      Handles a vote response and returns any leader heartbeats when leadership is won.
      Parameters:
      response - response
      Returns:
      outgoing messages
    • onAppendEntries

      public org.j7m.middleware.api.consensus.AppendEntriesResponse onAppendEntries(org.j7m.middleware.api.consensus.AppendEntriesRequest request)
      Handles AppendEntries.
      Parameters:
      request - request
      Returns:
      response
    • onAppendEntriesResponse

      public boolean onAppendEntriesResponse(org.j7m.middleware.api.consensus.AppendEntriesResponse response)
      Handles AppendEntries response.
      Parameters:
      response - response
      Returns:
      true if the leader state changed
    • appendLeaderCommand

      public org.j7m.middleware.api.consensus.ConsensusLogEntry appendLeaderCommand(org.j7m.middleware.api.consensus.ConsensusCommand command)
      Appends a command on the leader.
      Parameters:
      command - command
      Returns:
      assigned entry or null when not leader
    • appendRequestFor

      public org.j7m.middleware.api.consensus.AppendEntriesRequest appendRequestFor(org.j7m.middleware.api.consensus.ConsensusNodeId follower)
      Creates append request for one follower.
      Parameters:
      follower - follower id
      Returns:
      request
    • replicateMessages

      public List<ConsensusMessage> replicateMessages()
      Returns all follower append messages.
      Returns:
      append messages
    • leaderAppendOnlyHeld

      public boolean leaderAppendOnlyHeld()
      Returns whether leader append-only has held for this node.
      Returns:
      true when no leader truncation was observed
    • state

      public org.j7m.middleware.api.consensus.ConsensusState state()
      Returns state snapshot.
      Returns:
      state
    • appliedEntries

      public List<org.j7m.middleware.api.consensus.ConsensusLogEntry> appliedEntries()
      Returns applied entries.
      Returns:
      applied entries
    • role

      public org.j7m.middleware.api.consensus.ConsensusRole role()
      Returns current role.
      Returns:
      role
    • term

      public org.j7m.middleware.api.consensus.ConsensusTerm term()
      Returns current term.
      Returns:
      term
    • commitIndexValue

      public long commitIndexValue()
      Returns current commit index.
      Returns:
      commit index
    • logEntries

      public List<org.j7m.middleware.api.consensus.ConsensusLogEntry> logEntries()
      Returns log entries.
      Returns:
      log entries
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable