X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FRaftActorServerConfigurationSupport.java;h=16c091a4c3490c56ff7e10c3038d32f86cca2f84;hp=f76c7d70d528a3357afb1d90869b1245d0701449;hb=c9943f5bc72d4cde9356d3bd4cf73d36f4b2f754;hpb=a8000ee3b6071fa3b83500a39fc60ab3a9c5f085 diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java index f76c7d70d5..16c091a4c3 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java @@ -20,10 +20,9 @@ import java.util.Map; import java.util.Queue; import java.util.UUID; import javax.annotation.Nullable; -import org.opendaylight.controller.cluster.raft.ServerConfigurationPayload.ServerInfo; import org.opendaylight.controller.cluster.raft.base.messages.ApplyState; -import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout; import org.opendaylight.controller.cluster.raft.base.messages.SnapshotComplete; +import org.opendaylight.controller.cluster.raft.base.messages.TimeoutNow; import org.opendaylight.controller.cluster.raft.behaviors.AbstractLeader; import org.opendaylight.controller.cluster.raft.messages.AddServer; import org.opendaylight.controller.cluster.raft.messages.AddServerReply; @@ -34,9 +33,11 @@ import org.opendaylight.controller.cluster.raft.messages.ServerChangeReply; import org.opendaylight.controller.cluster.raft.messages.ServerChangeStatus; import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; import org.opendaylight.controller.cluster.raft.messages.UnInitializedFollowerSnapshotReply; +import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; +import org.opendaylight.controller.cluster.raft.persisted.ServerInfo; import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.yangtools.concepts.Identifier; -import org.opendaylight.yangtools.util.UUIDIdentifier; +import org.opendaylight.yangtools.util.AbstractUUIDIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import scala.concurrent.duration.FiniteDuration; @@ -342,11 +343,11 @@ class RaftActorServerConfigurationSupport { } @Override - public void onNewOperation(ServerOperationContext operationContext) { + public void onNewOperation(ServerOperationContext newOperationContext) { if(timedOut) { - sendReply(operationContext, ServerChangeStatus.PRIOR_REQUEST_CONSENSUS_TIMEOUT); + sendReply(newOperationContext, ServerChangeStatus.PRIOR_REQUEST_CONSENSUS_TIMEOUT); } else { - super.onNewOperation(operationContext); + super.onNewOperation(newOperationContext); } } } @@ -524,12 +525,20 @@ class RaftActorServerConfigurationSupport { } } + private static final class ServerOperationContextIdentifier extends AbstractUUIDIdentifier { + private static final long serialVersionUID = 1L; + + ServerOperationContextIdentifier() { + super(UUID.randomUUID()); + } + } + /** * Stores context information for a server operation. * * @param the operation type */ - private static abstract class ServerOperationContext { + private abstract static class ServerOperationContext { private final T operation; private final ActorRef clientRequestor; private final Identifier contextId; @@ -537,7 +546,7 @@ class RaftActorServerConfigurationSupport { ServerOperationContext(T operation, ActorRef clientRequestor){ this.operation = operation; this.clientRequestor = clientRequestor; - contextId = new UUIDIdentifier(UUID.randomUUID()); + contextId = new ServerOperationContextIdentifier(); } Identifier getContextId() { @@ -721,7 +730,7 @@ class RaftActorServerConfigurationSupport { return; } - raftContext.getActor().tell(ElectionTimeout.INSTANCE, raftContext.getActor()); + raftContext.getActor().tell(TimeoutNow.INSTANCE, raftContext.getActor()); currentOperationState = new WaitingForLeaderElected(changeVotingStatusContext, previousServerConfig); } @@ -783,6 +792,10 @@ class RaftActorServerConfigurationSupport { @Override void onNewLeader(String newLeader) { + if(newLeader == null) { + return; + } + LOG.debug("{}: New leader {} elected", raftContext.getId(), newLeader); timer.cancel();