Class ConsensusNode
java.lang.Object
org.j7m.middleware.consensus.ConsensusNode
- All Implemented Interfaces:
AutoCloseable
Single deterministic Raft-like node.
-
Constructor Summary
ConstructorsConstructorDescriptionConsensusNode(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 TypeMethodDescriptionorg.j7m.middleware.api.consensus.ConsensusLogEntryappendLeaderCommand(org.j7m.middleware.api.consensus.ConsensusCommand command) Appends a command on the leader.org.j7m.middleware.api.consensus.AppendEntriesRequestappendRequestFor(org.j7m.middleware.api.consensus.ConsensusNodeId follower) Creates append request for one follower.List<org.j7m.middleware.api.consensus.ConsensusLogEntry> Returns applied entries.voidclose()longReturns current commit index.voidcrash()Marks this node crashed.booleancrashed()Returns whether this node is crashed.booleanReturns whether leader append-only has held for this node.List<org.j7m.middleware.api.consensus.ConsensusLogEntry> Returns log entries.org.j7m.middleware.api.consensus.ConsensusNodeIdnodeId()Returns node id.org.j7m.middleware.api.consensus.AppendEntriesResponseonAppendEntries(org.j7m.middleware.api.consensus.AppendEntriesRequest request) Handles AppendEntries.booleanonAppendEntriesResponse(org.j7m.middleware.api.consensus.AppendEntriesResponse response) Handles AppendEntries response.org.j7m.middleware.api.consensus.RequestVoteResponseonRequestVote(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.restart()Restores this node process after durable recovery by replacing volatile state.org.j7m.middleware.api.consensus.ConsensusRolerole()Returns current role.Starts an election and returns vote request messages.org.j7m.middleware.api.consensus.ConsensusStatestate()Returns state snapshot.org.j7m.middleware.api.consensus.ConsensusTermterm()Returns current term.
-
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 configurationnodeId- node idstorageRoot- storage rootmetrics- 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
Restores this node process after durable recovery by replacing volatile state.- Returns:
- recovered node
-
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
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
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
Returns log entries.- Returns:
- log entries
-
close
public void close()- Specified by:
closein interfaceAutoCloseable
-