| Constructor and Description |
|---|
RaftNodeImpl(CPGroupId groupId,
Endpoint localMember,
Collection<Endpoint> members,
RaftAlgorithmConfig raftAlgorithmConfig,
RaftIntegration raftIntegration) |
| Modifier and Type | Method and Description |
|---|---|
void |
applyLogEntries()
Applies committed log entries between
lastApplied and commitIndex, if there's any available. |
void |
broadcastAppendRequest()
Broadcasts append-entries request to all group members according to their nextIndex parameters.
|
boolean |
canReplicateNewEntry(Object operation)
Returns true if a new entry with the operation is allowed to be replicated.
|
void |
completeFuture(long entryIndex,
Object response)
Completes the future registered with
entryIndex. |
void |
execute(Runnable task)
Executes task using
RaftIntegration.execute(Runnable). |
void |
forceSetTerminatedStatus()
Sets node's status to
RaftNodeStatus.TERMINATED unconditionally
if it's not terminated or stepped down yet. |
Object |
getAppendedEntryOnLeaderElection()
Returns the entry to be appended if the no-op entry append on leader election feature is enabled.
|
Collection<Endpoint> |
getAppliedMembers()
Returns the currently effective member list of the raft group this node
belongs to.
|
Collection<Endpoint> |
getCommittedMembers()
Returns the last committed member list of the raft group this node
belongs to.
|
CPGroupId |
getGroupId()
Returns the groupId which this node belongs to.
|
Collection<Endpoint> |
getInitialMembers()
Returns the initial member list of the Raft group this node belongs to.
|
Endpoint |
getLeader()
Returns the known leader endpoint.
|
long |
getLeaderElectionTimeoutInMillis()
Returns a randomized leader election timeout in milliseconds based on configured timeout.
|
Endpoint |
getLocalMember()
Returns the Raft endpoint for this node.
|
ILogger |
getLogger(Class clazz) |
RaftNodeStatus |
getStatus()
Returns the current status of this node.
|
void |
handleAppendRequest(AppendRequest request)
Handles
AppendRequest sent by leader. |
void |
handleAppendResponse(AppendFailureResponse response)
Handles
AppendFailureResponse for a previously sent
append request by this node. |
void |
handleAppendResponse(AppendSuccessResponse response)
Handles
AppendSuccessResponse for a previously sent
append request by this node. |
void |
handleInstallSnapshot(InstallSnapshot request)
Handles
InstallSnapshot sent by leader. |
void |
handlePreVoteRequest(PreVoteRequest request)
Handles
PreVoteRequest sent by another follower. |
void |
handlePreVoteResponse(PreVoteResponse response)
Handles
PreVoteResponse for a previously sent request by
this node. |
void |
handleVoteRequest(VoteRequest request)
Handles
VoteRequest sent by a candidate. |
void |
handleVoteResponse(VoteResponse response)
Handles
VoteResponse for a previously sent vote request by
this node. |
boolean |
installSnapshot(SnapshotEntry snapshot)
Restores the snapshot sent by the leader if it's not applied before.
|
void |
invalidateFuturesFrom(long entryIndex)
Invalidates futures registered with indexes
>= entryIndex. |
boolean |
isTerminatedOrSteppedDown()
Returns true if this node is
RaftNodeStatus.TERMINATED or
RaftNodeStatus.STEPPED_DOWN, false otherwise. |
long |
lastAppendEntriesTimestamp() |
void |
printMemberState() |
ICompletableFuture |
query(Object operation,
QueryPolicy queryPolicy)
Executes the given operation on Raft group depending
on the
QueryPolicy |
void |
registerFuture(long entryIndex,
SimpleCompletableFuture future)
Registers the future for the appended entry with its
entryIndex. |
ICompletableFuture |
replicate(Object operation)
Replicates the given operation to the Raft group.
|
ICompletableFuture |
replicateMembershipChange(Endpoint member,
MembershipChangeMode mode)
Replicates the membership change to the Raft group.
|
ICompletableFuture |
replicateMembershipChange(Endpoint member,
MembershipChangeMode mode,
long groupMembersCommitIndex)
Replicates the membership change to the Raft group, if expected members
commit index is equal to the actual one stored in Raft state.
|
void |
resetGroupMembers()
Resets Raft group members back.
|
void |
runQueryOperation(Object operation,
SimpleCompletableFuture resultFuture)
Executes query operation sets execution result to the future.
|
void |
schedule(Runnable task,
long delayInMillis)
Schedules task using
RaftIntegration.schedule(Runnable, long, TimeUnit). |
void |
scheduleHeartbeat()
Schedules periodic heartbeat task when a new leader is elected.
|
void |
send(AppendFailureResponse response,
Endpoint target) |
void |
send(AppendRequest request,
Endpoint target) |
void |
send(AppendSuccessResponse response,
Endpoint target) |
void |
send(PreVoteRequest request,
Endpoint target) |
void |
send(PreVoteResponse response,
Endpoint target) |
void |
send(VoteRequest request,
Endpoint target) |
void |
send(VoteResponse response,
Endpoint target) |
void |
sendAppendRequest(Endpoint follower)
Sends an append-entries request to the follower member.
|
void |
setStatus(RaftNodeStatus newStatus) |
void |
start()
Starts the periodic tasks, such as voting, leader failure-detection, snapshot handling.
|
RaftState |
state() |
void |
updateGroupMembers(long logIndex,
Collection<Endpoint> members)
Updates Raft group members.
|
void |
updateLastAppendEntriesTimestamp() |
public RaftNodeImpl(CPGroupId groupId, Endpoint localMember, Collection<Endpoint> members, RaftAlgorithmConfig raftAlgorithmConfig, RaftIntegration raftIntegration)
public CPGroupId getGroupId()
RaftNodegetGroupId in interface RaftNodepublic Endpoint getLocalMember()
RaftNodegetLocalMember in interface RaftNodepublic Endpoint getLeader()
RaftNodepublic RaftNodeStatus getStatus()
RaftNodepublic Collection<Endpoint> getInitialMembers()
RaftNodegetInitialMembers in interface RaftNodepublic Collection<Endpoint> getCommittedMembers()
RaftNodegetCommittedMembers in interface RaftNodepublic Collection<Endpoint> getAppliedMembers()
RaftNodegetAppliedMembers in interface RaftNodepublic void forceSetTerminatedStatus()
RaftNodeRaftNodeStatus.TERMINATED unconditionally
if it's not terminated or stepped down yet.forceSetTerminatedStatus in interface RaftNodepublic void start()
public void handlePreVoteRequest(PreVoteRequest request)
RaftNodePreVoteRequest sent by another follower.handlePreVoteRequest in interface RaftNodepublic void handlePreVoteResponse(PreVoteResponse response)
RaftNodePreVoteResponse for a previously sent request by
this node.handlePreVoteResponse in interface RaftNodepublic void handleVoteRequest(VoteRequest request)
RaftNodeVoteRequest sent by a candidate.handleVoteRequest in interface RaftNodepublic void handleVoteResponse(VoteResponse response)
RaftNodeVoteResponse for a previously sent vote request by
this node.handleVoteResponse in interface RaftNodepublic void handleAppendRequest(AppendRequest request)
RaftNodeAppendRequest sent by leader.handleAppendRequest in interface RaftNodepublic void handleAppendResponse(AppendSuccessResponse response)
RaftNodeAppendSuccessResponse for a previously sent
append request by this node.handleAppendResponse in interface RaftNodepublic void handleAppendResponse(AppendFailureResponse response)
RaftNodeAppendFailureResponse for a previously sent
append request by this node.handleAppendResponse in interface RaftNodepublic void handleInstallSnapshot(InstallSnapshot request)
RaftNodeInstallSnapshot sent by leader.handleInstallSnapshot in interface RaftNodepublic ICompletableFuture replicate(Object operation)
RaftNodeOtherwise, if this node is not leader, or the leader is demoted before committing the operation, the returned future is notified with a related exception.
public ICompletableFuture replicateMembershipChange(Endpoint member, MembershipChangeMode mode)
RaftNodeIf this node is not leader, or the leader is demoted before committing the operation, or membership change is not committed for any reason, then the returned future is notified with a related exception.
replicateMembershipChange in interface RaftNodemember - member to add or removemode - type of membership changepublic ICompletableFuture replicateMembershipChange(Endpoint member, MembershipChangeMode mode, long groupMembersCommitIndex)
RaftNodeMismatchingGroupMembersCommitIndexException.
For more info see RaftNode.replicate(Object).
replicateMembershipChange in interface RaftNodemember - member to add or removemode - type of membership changegroupMembersCommitIndex - expected members commit indexpublic ICompletableFuture query(Object operation, QueryPolicy queryPolicy)
RaftNodeQueryPolicypublic boolean isTerminatedOrSteppedDown()
RaftNodeRaftNodeStatus.TERMINATED or
RaftNodeStatus.STEPPED_DOWN, false otherwise.
This method is essentially same as;
return status == TERMINATED || status == STEPPED_DOWN
isTerminatedOrSteppedDown in interface RaftNodepublic void setStatus(RaftNodeStatus newStatus)
public long getLeaderElectionTimeoutInMillis()
public Object getAppendedEntryOnLeaderElection()
public boolean canReplicateNewEntry(Object operation)
RaftNodeStatus.RaftAlgorithmConfig.getUncommittedEntryCountToRejectNewAppends().RaftGroupCmd and there's an ongoing membership change in group.RaftIntegration.getAppendedEntryOnLeaderElection() ()}.public void scheduleHeartbeat()
public void send(PreVoteRequest request, Endpoint target)
public void send(PreVoteResponse response, Endpoint target)
public void send(VoteRequest request, Endpoint target)
public void send(VoteResponse response, Endpoint target)
public void send(AppendRequest request, Endpoint target)
public void send(AppendSuccessResponse response, Endpoint target)
public void send(AppendFailureResponse response, Endpoint target)
public void broadcastAppendRequest()
public void sendAppendRequest(Endpoint follower)
Log entries between follower's known nextIndex and latest appended entry index are sent in a batch.
Batch size can be RaftAlgorithmConfig.getAppendRequestMaxEntryCount() at most.
If follower's nextIndex is behind the latest snapshot index, then InstallSnapshot request is sent.
If leader doesn't know follower's matchIndex (if matchIndex == 0), then an empty append-entries is sent
to save bandwidth until leader learns the matchIndex of the follower.
If log entries contains multiple membership change entries, then entries batch is split to send only a single membership change in single append-entries request.
public void applyLogEntries()
lastApplied and commitIndex, if there's any available.
If new entries are applied, RaftState's lastApplied field is updated.RaftState.lastApplied(),
RaftState.commitIndex()public void updateLastAppendEntriesTimestamp()
public long lastAppendEntriesTimestamp()
public RaftState state()
public void runQueryOperation(Object operation, SimpleCompletableFuture resultFuture)
public void execute(Runnable task)
RaftIntegration.execute(Runnable).public void schedule(Runnable task, long delayInMillis)
RaftIntegration.schedule(Runnable, long, TimeUnit).public void registerFuture(long entryIndex,
SimpleCompletableFuture future)
entryIndex.public void completeFuture(long entryIndex,
Object response)
entryIndex.public void invalidateFuturesFrom(long entryIndex)
>= entryIndex. Note that entryIndex is inclusive.
LeaderDemotedException is set a result to futures.public boolean installSnapshot(SnapshotEntry snapshot)
public void printMemberState()
public void updateGroupMembers(long logIndex,
Collection<Endpoint> members)
public void resetGroupMembers()
RaftState.resetGroupMembers()Copyright © 2020 Hazelcast, Inc.. All Rights Reserved.