X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FFollower.java;h=bdd459ecffb3071c26e8d8d0bc53bacaab783f05;hb=6dcee56392712348b1abdcdc0d1d5f94dfcf505c;hp=618865cb88eb8877cdcfdcfb29208c80707c2c0f;hpb=6eb0469b729fbe69dad58ce6223fc231669089c7;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java index 618865cb88..bdd459ecff 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java @@ -96,6 +96,19 @@ public class Follower extends AbstractRaftActorBehavior { // to make it easier to read. Before refactoring ensure tests // cover the code properly + if (snapshotTracker != null) { + // if snapshot install is in progress, follower should just acknowledge append entries with a reply. + AppendEntriesReply reply = new AppendEntriesReply(context.getId(), currentTerm(), true, + lastIndex(), lastTerm()); + + if(LOG.isDebugEnabled()) { + LOG.debug("{}: snapshot install is in progress, replying immediately with {}", logName(), reply); + } + sender.tell(reply, actor()); + + return this; + } + // 1. Reply false if term < currentTerm (§5.1) // This is handled in the appendEntries method of the base class @@ -352,7 +365,7 @@ public class Follower extends AbstractRaftActorBehavior { return snapshotTracker; } - private static class InitialSyncStatusTracker { + private class InitialSyncStatusTracker { private static final long INVALID_LOG_INDEX = -2L; private long initialLeaderCommit = INVALID_LOG_INDEX; @@ -374,10 +387,10 @@ public class Follower extends AbstractRaftActorBehavior { if(!initialSyncUpDone){ if(initialLeaderCommit == INVALID_LOG_INDEX){ - actor.tell(new FollowerInitialSyncUpStatus(false), ActorRef.noSender()); + actor.tell(new FollowerInitialSyncUpStatus(false, getId()), ActorRef.noSender()); initialLeaderCommit = leaderCommit; } else if(commitIndex >= initialLeaderCommit){ - actor.tell(new FollowerInitialSyncUpStatus(true), ActorRef.noSender()); + actor.tell(new FollowerInitialSyncUpStatus(true, getId()), ActorRef.noSender()); initialSyncUpDone = true; } }