X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FPartitionedCandidateOnStartupElectionScenarioTest.java;h=65950a9b0b113ec06e490e40c317184ab4848895;hp=7ab76d271a31d7b7cd82aa1559c4507800088819;hb=5699039102dc439a1cec521b3a7c320f36ee6d80;hpb=a54ec60368110d22794602343c934902f6833c65 diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/PartitionedCandidateOnStartupElectionScenarioTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/PartitionedCandidateOnStartupElectionScenarioTest.java index 7ab76d271a..65950a9b0b 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/PartitionedCandidateOnStartupElectionScenarioTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/PartitionedCandidateOnStartupElectionScenarioTest.java @@ -17,6 +17,7 @@ import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockReplica import org.opendaylight.controller.cluster.raft.MockRaftActorContext.SimpleReplicatedLog; import org.opendaylight.controller.cluster.raft.RaftState; import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout; +import org.opendaylight.controller.cluster.raft.base.messages.TimeoutNow; import org.opendaylight.controller.cluster.raft.messages.RequestVote; import org.opendaylight.controller.cluster.raft.messages.RequestVoteReply; @@ -61,7 +62,7 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL member3Actor.expectMessageClass(RequestVote.class, 1); member3Actor.expectBehaviorStateChange(); - member1ActorRef.tell(new ElectionTimeout(), ActorRef.noSender()); + member1ActorRef.tell(TimeoutNow.INSTANCE, ActorRef.noSender()); member2Actor.waitForExpectedMessages(RequestVote.class); member3Actor.waitForExpectedMessages(RequestVote.class); @@ -118,7 +119,7 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL member3Actor.clear(); member3Actor.expectMessageClass(RequestVoteReply.class, 1); - member3ActorRef.tell(new ElectionTimeout(), ActorRef.noSender()); + member3ActorRef.tell(ElectionTimeout.INSTANCE, ActorRef.noSender()); member1Actor.waitForExpectedMessages(RequestVote.class); member2Actor.waitForExpectedMessages(RequestVote.class); @@ -164,10 +165,11 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL // will be 2 and the last term will be 1 so it is behind the leader's log. SimpleReplicatedLog candidateReplicatedLog = new SimpleReplicatedLog(); - candidateReplicatedLog.append(new MockReplicatedLogEntry(1, 1, new MockPayload(""))); - candidateReplicatedLog.append(new MockReplicatedLogEntry(2, 1, new MockPayload(""))); + candidateReplicatedLog.append(new MockReplicatedLogEntry(2, 0, new MockPayload(""))); member3Context.setReplicatedLog(candidateReplicatedLog); + member3Context.setCommitIndex(candidateReplicatedLog.lastIndex()); + member3Context.setLastApplied(candidateReplicatedLog.lastIndex()); member3Context.getTermInformation().update(2, member1Context.getId()); // The member 3 Candidate will start a new term and send RequestVotes. However it will be @@ -181,13 +183,14 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL Candidate member3Behavior = new Candidate(member3Context); member3Actor.behavior = member3Behavior; + member3Context.setCurrentBehavior(member3Behavior); // Send several additional ElectionTimeouts to Candidate member 3. Each ElectionTimeout will // start a new term so Candidate member 3's current term will be greater than the leader's // current term. for(int i = 0; i < numCandidateElections - 1; i++) { - member3ActorRef.tell(new ElectionTimeout(), ActorRef.noSender()); + member3ActorRef.tell(ElectionTimeout.INSTANCE, ActorRef.noSender()); } member1Actor.waitForExpectedMessages(RequestVote.class); @@ -208,6 +211,13 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL private void setupInitialMember1AndMember2Behaviors() throws Exception { testLog.info("setupInitialMember1AndMember2Behaviors starting"); + // Initialize the ReplicatedLog and election term info for member 1 and 2. The current term + // will be 3 and the last term will be 2. + + SimpleReplicatedLog replicatedLog = new SimpleReplicatedLog(); + replicatedLog.append(new MockReplicatedLogEntry(2, 0, new MockPayload(""))); + replicatedLog.append(new MockReplicatedLogEntry(3, 1, new MockPayload(""))); + // Create member 2's behavior as Follower. member2Context = newRaftActorContext("member2", member2ActorRef, @@ -218,8 +228,13 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL DefaultConfigParamsImpl member2ConfigParams = newConfigParams(); member2Context.setConfigParams(member2ConfigParams); - Follower member2Behavior = new Follower(member2Context); - member2Actor.behavior = member2Behavior; + member2Context.setReplicatedLog(replicatedLog); + member2Context.setCommitIndex(replicatedLog.lastIndex()); + member2Context.setLastApplied(replicatedLog.lastIndex()); + member2Context.getTermInformation().update(3, "member1"); + + member2Actor.behavior = new Follower(member2Context); + member2Context.setCurrentBehavior(member2Actor.behavior); // Create member 1's behavior as Leader. @@ -231,24 +246,17 @@ public class PartitionedCandidateOnStartupElectionScenarioTest extends AbstractL DefaultConfigParamsImpl member1ConfigParams = newConfigParams(); member1Context.setConfigParams(member1ConfigParams); + member1Context.setReplicatedLog(replicatedLog); + member1Context.setCommitIndex(replicatedLog.lastIndex()); + member1Context.setLastApplied(replicatedLog.lastIndex()); + member1Context.getTermInformation().update(3, "member1"); + initializeLeaderBehavior(member1Actor, member1Context, 1); member2Actor.clear(); member3Actor.clear(); - // Initialize the ReplicatedLog and election term info for member 1 and 2. The current term - // will be 3 and the last term will be 2. - - SimpleReplicatedLog replicatedLog = new SimpleReplicatedLog(); - replicatedLog.append(new MockReplicatedLogEntry(2, 1, new MockPayload(""))); - replicatedLog.append(new MockReplicatedLogEntry(3, 1, new MockPayload(""))); - - member1Context.setReplicatedLog(replicatedLog); - member1Context.getTermInformation().update(3, ""); - - member2Context.setReplicatedLog(replicatedLog); - member2Context.getTermInformation().update(3, member1Context.getId()); - testLog.info("setupInitialMember1AndMember2Behaviors ending"); + } }