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%2FAbstractRaftActorBehavior.java;h=d17fba03d4ba58e77168602ffe388431b0a64a1a;hb=01c5a7cc52f8a438053d52ebb91e531493ca765a;hp=39c097f4ee36a250bd7e69a30e9042bc41d91fe5;hpb=af65c60b352ab06eb32294ccd9879f5e43585e31;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractRaftActorBehavior.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractRaftActorBehavior.java index 39c097f4ee..d17fba03d4 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractRaftActorBehavior.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/AbstractRaftActorBehavior.java @@ -10,18 +10,13 @@ package org.opendaylight.controller.cluster.raft.behaviors; import akka.actor.ActorRef; import akka.actor.Cancellable; -import java.util.HashSet; import java.util.Random; -import java.util.Set; import java.util.concurrent.TimeUnit; import org.opendaylight.controller.cluster.raft.ClientRequestTracker; import org.opendaylight.controller.cluster.raft.RaftActorContext; import org.opendaylight.controller.cluster.raft.RaftState; import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry; import org.opendaylight.controller.cluster.raft.SerializationUtils; -import org.opendaylight.controller.cluster.raft.ServerConfigurationPayload; -import org.opendaylight.controller.cluster.raft.ServerConfigurationPayload.ServerInfo; -import org.opendaylight.controller.cluster.raft.VotingState; import org.opendaylight.controller.cluster.raft.base.messages.ApplyJournalEntries; import org.opendaylight.controller.cluster.raft.base.messages.ApplyState; import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout; @@ -257,6 +252,10 @@ public abstract class AbstractRaftActorBehavior implements RaftActorBehavior { } } + protected boolean canStartElection() { + return context.getRaftPolicy().automaticElectionsEnabled() && context.isVotingMember(); + } + /** * schedule a new election * @@ -265,12 +264,11 @@ public abstract class AbstractRaftActorBehavior implements RaftActorBehavior { protected void scheduleElection(FiniteDuration interval) { stopElection(); - // Schedule an election. When the scheduler triggers an ElectionTimeout - // message is sent to itself - electionCancel = - context.getActorSystem().scheduler().scheduleOnce(interval, - context.getActor(), ELECTION_TIMEOUT, - context.getActorSystem().dispatcher(), context.getActor()); + if(canStartElection()) { + // Schedule an election. When the scheduler triggers an ElectionTimeout message is sent to itself + electionCancel = context.getActorSystem().scheduler().scheduleOnce(interval, context.getActor(), + ELECTION_TIMEOUT,context.getActorSystem().dispatcher(), context.getActor()); + } } /** @@ -494,23 +492,4 @@ public abstract class AbstractRaftActorBehavior implements RaftActorBehavior { protected String getId(){ return context.getId(); } - - public void applyServerConfiguration(ServerConfigurationPayload serverConfig) { - Set currentPeers = new HashSet<>(context.getPeerIds()); - for(ServerInfo server: serverConfig.getServerConfig()) { - if(!getId().equals(server.getId())) { - VotingState votingState = server.isVoting() ? VotingState.VOTING: VotingState.NON_VOTING; - if(!currentPeers.contains(server.getId())) { - context.addToPeers(server.getId(), null, votingState); - } else { - context.getPeerInfo(server.getId()).setVotingState(votingState); - currentPeers.remove(server.getId()); - } - } - } - - for(String peerIdToRemove: currentPeers) { - context.removePeer(peerIdToRemove); - } - } }