From 0e0835991cb08eedfe0be4863f2557528d4573dc Mon Sep 17 00:00:00 2001 From: Kamal Rameshan Date: Wed, 19 Nov 2014 19:21:14 -0800 Subject: [PATCH] Bug-2277: fix the Leader test failing in jenkins Change-Id: I149d643b517df5010595962cbdf616c2b2fb9945 Signed-off-by: Kamal Rameshan --- .../cluster/raft/FollowerLogInformation.java | 5 +++++ .../cluster/raft/FollowerLogInformationImpl.java | 7 +++++++ .../controller/cluster/raft/behaviors/Leader.java | 5 +++++ .../controller/cluster/raft/behaviors/LeaderTest.java | 11 ++--------- .../cluster/raft/utils/MessageCollectorActor.java | 2 +- 5 files changed, 20 insertions(+), 10 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformation.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformation.java index 2c4304d404..4d2bad5c2e 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformation.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformation.java @@ -72,5 +72,10 @@ public interface FollowerLogInformation { */ public void markFollowerActive(); + /** + * This will stop the timeout clock + */ + public void markFollowerInActive(); + } diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java index c0cfd7e862..7df80af58a 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java @@ -80,4 +80,11 @@ public class FollowerLogInformationImpl implements FollowerLogInformation{ } stopwatch.start(); } + + @Override + public void markFollowerInActive() { + if (stopwatch.isRunning()) { + stopwatch.stop(); + } + } } diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java index 0dd3900113..97ecef370f 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Leader.java @@ -113,4 +113,9 @@ public class Leader extends AbstractLeader { void markFollowerActive(String followerId) { followerToLog.get(followerId).markFollowerActive(); } + + @VisibleForTesting + void markFollowerInActive(String followerId) { + followerToLog.get(followerId).markFollowerInActive(); + } } diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java index 6b534deb1f..0fc0b4ccfd 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/LeaderTest.java @@ -6,7 +6,6 @@ import akka.actor.Props; import akka.actor.Terminated; import akka.testkit.JavaTestKit; import com.google.common.base.Optional; -import com.google.common.util.concurrent.Uninterruptibles; import com.google.protobuf.ByteString; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -994,10 +993,7 @@ public class LeaderTest extends AbstractRaftActorBehaviorTest { final Terminated termMsg1 = probe.expectMsgClass(Terminated.class); assertEquals(termMsg1.getActor(), followerActor1); - //sleep enough for all the follower stopwatches to lapse - Uninterruptibles.sleepUninterruptibly(leaderActorContext.getConfigParams(). - getElectionTimeOutInterval().toMillis(), TimeUnit.MILLISECONDS); - + leader.markFollowerInActive("follower-1"); leader.markFollowerActive("follower-2"); behavior = leader.handleMessage(leaderActor, new IsolatedLeaderCheck()); Assert.assertTrue("Behavior not instance of Leader when majority of followers are active", @@ -1010,10 +1006,7 @@ public class LeaderTest extends AbstractRaftActorBehaviorTest { final Terminated termMsg2 = probe.expectMsgClass(Terminated.class); assertEquals(termMsg2.getActor(), followerActor2); - //sleep enough for the remaining the follower stopwatches to lapse - Uninterruptibles.sleepUninterruptibly(leaderActorContext.getConfigParams(). - getElectionTimeOutInterval().toMillis(), TimeUnit.MILLISECONDS); - + leader.markFollowerInActive("follower-2"); behavior = leader.handleMessage(leaderActor, new IsolatedLeaderCheck()); Assert.assertTrue("Behavior not instance of IsolatedLeader when majority followers are inactive", behavior instanceof IsolatedLeader); diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/MessageCollectorActor.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/MessageCollectorActor.java index 2a79c8f4bc..9fbdd4587f 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/MessageCollectorActor.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/utils/MessageCollectorActor.java @@ -29,7 +29,7 @@ public class MessageCollectorActor extends UntypedActor { @Override public void onReceive(Object message) throws Exception { if(message instanceof String){ if("get-all-messages".equals(message)){ - getSender().tell(messages, getSelf()); + getSender().tell(new ArrayList(messages), getSelf()); } } else { messages.add(message); -- 2.36.6