Change-Id: I149d643b517df5010595962cbdf616c2b2fb9945
Signed-off-by: Kamal Rameshan <kramesha@cisco.com>
*/
public void markFollowerActive();
*/
public void markFollowerActive();
+ /**
+ * This will stop the timeout clock
+ */
+ public void markFollowerInActive();
+
+
+ @Override
+ public void markFollowerInActive() {
+ if (stopwatch.isRunning()) {
+ stopwatch.stop();
+ }
+ }
void markFollowerActive(String followerId) {
followerToLog.get(followerId).markFollowerActive();
}
void markFollowerActive(String followerId) {
followerToLog.get(followerId).markFollowerActive();
}
+
+ @VisibleForTesting
+ void markFollowerInActive(String followerId) {
+ followerToLog.get(followerId).markFollowerInActive();
+ }
import akka.actor.Terminated;
import akka.testkit.JavaTestKit;
import com.google.common.base.Optional;
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;
import com.google.protobuf.ByteString;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
final Terminated termMsg1 = probe.expectMsgClass(Terminated.class);
assertEquals(termMsg1.getActor(), followerActor1);
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",
leader.markFollowerActive("follower-2");
behavior = leader.handleMessage(leaderActor, new IsolatedLeaderCheck());
Assert.assertTrue("Behavior not instance of Leader when majority of followers are active",
final Terminated termMsg2 = probe.expectMsgClass(Terminated.class);
assertEquals(termMsg2.getActor(), followerActor2);
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);
behavior = leader.handleMessage(leaderActor, new IsolatedLeaderCheck());
Assert.assertTrue("Behavior not instance of IsolatedLeader when majority followers are inactive",
behavior instanceof IsolatedLeader);
@Override public void onReceive(Object message) throws Exception {
if(message instanceof String){
if("get-all-messages".equals(message)){
@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);
}
} else {
messages.add(message);