[
https://issues.apache.org/jira/browse/RATIS-498?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16797902#comment-16797902
]
Tsz Wo Nicholas Sze commented on RATIS-498:
-------------------------------------------
Thanks for the update. Some more comments:
In RaftServerImpl.notifyStateMachineToInstallSnapshot
- change isSMSnapshotInstallationInProgress to
AtomicReference<InstallSnapshotRequestProto> so that it can record the reqeust.
When there is another reqeust, we may compare if they are the same reqeust.
- We should use compareAndSet for isSMSnapshotInstallationInProgress.
Otherwise, it is not atomic.
{code}
// Check if there is already a snapshot installation in progress.
if (isSMSnapshotInstallationInProgress.compareAndSet(false, true)) {
{code}
- the notifyStateMachineThread is not needed. The state machine should take
care thread management for the call. The code should look like:
{code}
stateMachine.notifyInstallSnapshotFromLeader(firstAvailableLogIndex).thenAccept(reply
-> {
synchronized (this) {
state.reloadStateMachine(reply, leaderTerm);
}
}).exceptionally(exception -> {
// TODO: how to deal with the failure?
LOG.error(getId() + ": State Machine failed to install snapshot",
exception);
return null;
});
{code}
Other comments:
- In the current design, INSTALL_SNAPSHOT_NOTIFICATION is a short request so
that it does not need START and COMPLETE in FollowerState.UpdateType. Just use
INSTALL_SNAPSHOT_NOTIFICATION(AtomicInteger::get); see REQUEST_VOTE.
- Use getFollowerId() in LogAppender.createInstallSnapshotNotificationRequest.
- Please add some tests.
> Notify Follower to Install Snapshot through state machine
> ---------------------------------------------------------
>
> Key: RATIS-498
> URL: https://issues.apache.org/jira/browse/RATIS-498
> Project: Ratis
> Issue Type: New Feature
> Components: server
> Reporter: Hanisha Koneru
> Assignee: Hanisha Koneru
> Priority: Major
> Attachments: RATIS-498.000.patch, RATIS-498.001.patch,
> RATIS-498.002.patch, RATIS-498.003.patch
>
>
> When a lagging Follower wants to catch up with the Leader, and the Leader
> only has logs with start index greater than the Followers's last log index,
> then the leader sends an InstallSnapshotRequest to the the Follower.
> The aim of this Jira is to allow State Machine to decouple snapshot
> installation from the Ratis server. When Leader does not have the logs to get
> the Follower up to speed, it should notify the Follower to install a snapshot
> (if install snapshot through Log Appender is disabled). The Follower in turn
> notifies its state machine that a snapshot is required to catch up with the
> leader.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)