public interface RaftIntegration
Modifier and Type | Method and Description |
---|---|
void |
execute(Runnable task)
Executes the given task on the underlying task execution mechanism.
|
Object |
getAppendedEntryOnLeaderElection()
Returns the entry to be appended if the no-op entry append on leader
election feature is enabled.
|
CPMember |
getCPMember(RaftEndpoint target)
Returns the CP member instance of the given Raft endpoint
|
ILogger |
getLogger(String name)
Returns an
ILogger instance for given name. |
boolean |
isLinearizableReadOptimizationEnabled()
Returns true if the linearizable read optimization is enabled.
|
boolean |
isReachable(RaftEndpoint endpoint)
Returns true if the endpoint is reachable by the time this method
is called, false otherwise.
|
boolean |
isReady()
Returns true if underlying platform is ready to operate,
false otherwise.
|
InternalCompletableFuture |
newCompletableFuture()
Creates a new instance of
SimpleCompletableFuture . |
void |
onNodeStatusChange(RaftNodeStatus status)
Called when RaftNode status changes.
|
void |
restoreSnapshot(Object operation,
long commitIndex)
Restores the snapshot with the given operation for the given commit
index
|
Object |
runOperation(Object operation,
long commitIndex)
Executes the operation on underlying operation execution mechanism
and returns its return value.
|
void |
schedule(Runnable task,
long delay,
TimeUnit timeUnit)
Schedules the task on the underlying platform to be executed after
the given delay.
|
boolean |
send(AppendFailureResponse response,
RaftEndpoint target)
Sends the given
AppendFailureResponse DTO to target endpoint
to be handled via RaftNode.handleAppendResponse(AppendFailureResponse) . |
boolean |
send(AppendRequest request,
RaftEndpoint target)
Sends the given
AppendRequest DTO to target endpoint
to be handled via RaftNode.handleAppendRequest(AppendRequest) . |
boolean |
send(AppendSuccessResponse response,
RaftEndpoint target)
Sends the given
AppendSuccessResponse DTO to target endpoint
to be handled via RaftNode.handleAppendResponse(AppendSuccessResponse) . |
boolean |
send(InstallSnapshot request,
RaftEndpoint target)
Sends the given
InstallSnapshot DTO to target endpoint
to be handled via RaftNode.handleInstallSnapshot(InstallSnapshot) . |
boolean |
send(PreVoteRequest request,
RaftEndpoint target)
Sends the given
PreVoteRequest DTO to target endpoint
to be handled by via RaftNode.handlePreVoteRequest(PreVoteRequest) . |
boolean |
send(PreVoteResponse response,
RaftEndpoint target)
Sends the given
PreVoteResponse DTO to target endpoint
to be handled via RaftNode.handlePreVoteResponse(PreVoteResponse) . |
boolean |
send(TriggerLeaderElection request,
RaftEndpoint target)
Sends the given
TriggerLeaderElection DTO to target endpoint
to be handled via RaftNode.handleTriggerLeaderElection(TriggerLeaderElection) . |
boolean |
send(VoteRequest request,
RaftEndpoint target)
Sends the given
VoteRequest DTO to target endpoint
to be handled via RaftNode.handleVoteRequest(VoteRequest) . |
boolean |
send(VoteResponse response,
RaftEndpoint target)
Sends the given
VoteResponse DTO to target endpoint
to be handled via RaftNode.handleVoteResponse(VoteResponse) . |
void |
submit(Runnable task)
Submits the given task for execution.
|
Object |
takeSnapshot(long commitIndex)
Take a snapshot for the given commit index which is the current commit
index
|
ILogger getLogger(String name)
ILogger
instance for given name.name
- logger nameboolean isReady()
boolean isReachable(RaftEndpoint endpoint)
endpoint
- endpointboolean send(PreVoteRequest request, RaftEndpoint target)
PreVoteRequest
DTO to target endpoint
to be handled by via RaftNode.handlePreVoteRequest(PreVoteRequest)
.boolean send(PreVoteResponse response, RaftEndpoint target)
PreVoteResponse
DTO to target endpoint
to be handled via RaftNode.handlePreVoteResponse(PreVoteResponse)
.boolean send(VoteRequest request, RaftEndpoint target)
VoteRequest
DTO to target endpoint
to be handled via RaftNode.handleVoteRequest(VoteRequest)
.boolean send(VoteResponse response, RaftEndpoint target)
VoteResponse
DTO to target endpoint
to be handled via RaftNode.handleVoteResponse(VoteResponse)
.boolean send(AppendRequest request, RaftEndpoint target)
AppendRequest
DTO to target endpoint
to be handled via RaftNode.handleAppendRequest(AppendRequest)
.boolean send(AppendSuccessResponse response, RaftEndpoint target)
AppendSuccessResponse
DTO to target endpoint
to be handled via RaftNode.handleAppendResponse(AppendSuccessResponse)
.boolean send(AppendFailureResponse response, RaftEndpoint target)
AppendFailureResponse
DTO to target endpoint
to be handled via RaftNode.handleAppendResponse(AppendFailureResponse)
.boolean send(InstallSnapshot request, RaftEndpoint target)
InstallSnapshot
DTO to target endpoint
to be handled via RaftNode.handleInstallSnapshot(InstallSnapshot)
.boolean send(TriggerLeaderElection request, RaftEndpoint target)
TriggerLeaderElection
DTO to target endpoint
to be handled via RaftNode.handleTriggerLeaderElection(TriggerLeaderElection)
.Object runOperation(Object operation, long commitIndex)
operation
- raft operationcommitIndex
- commit indexObject takeSnapshot(long commitIndex)
commitIndex
- commit indexSnapshotEntry
void restoreSnapshot(Object operation, long commitIndex)
operation
- snapshot operation provided by takeSnapshot(long)
commitIndex
- commit index of the snapshotvoid execute(Runnable task)
Please note that all tasks of a single Raft node must be executed in a single-threaded manner and the happens-before relationship must be maintained between given tasks of the Raft node.
The underlying platform is free to execute the given task immediately if it fits to the defined guarantees.
task
- the task to be executed.void submit(Runnable task)
If the caller is already on the thread that runs the Raft node, the given task cannot be executed immediately and it must be put into the internal task queue for execution in future.
task
- to be executed later.void schedule(Runnable task, long delay, TimeUnit timeUnit)
Please note that even though the scheduling can be offloaded to another thread, the given task must be executed in a single-threaded manner and the happens-before relationship must be maintained between given tasks of the Raft node.
task
- the task to be executed in futuredelay
- the time from now to delay executiontimeUnit
- the time unit of the delayInternalCompletableFuture newCompletableFuture()
SimpleCompletableFuture
.Object getAppendedEntryOnLeaderElection()
See Bug in single-server membership changes post by Diego Ongaro for more info.
boolean isLinearizableReadOptimizationEnabled()
See Section 6.4 of the Raft Dissertation for more information about the linearizable read optimization.
CPMember getCPMember(RaftEndpoint target)
void onNodeStatusChange(RaftNodeStatus status)
status
- new statusCopyright © 2019 Hazelcast, Inc.. All rights reserved.