From f86f7e8c204fb19615c45e669a764c623576e1a3 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 23 Mar 2016 13:29:04 +0100 Subject: [PATCH] Move ShardManager into its own package ShardManager contains quite a few classes, which are not used by the rest of the data store. Some of them are in their own files, some of them are hosted in ShardManager.java. This first step allows us to isolate related functionality without leaking it to the rest of the package, separating internal an external interfaces. Change-Id: I955296d739d962d912eadf0507c317b0a8e71deb Signed-off-by: Robert Varga --- .../datastore/DistributedDataStore.java | 1 + .../controller/cluster/datastore/Shard.java | 4 +- .../cluster/datastore/ShardManager.java | 1854 +---------------- .../datastore/messages/FindLocalShard.java | 2 +- .../datastore/messages/LocalShardFound.java | 2 +- .../messages/LocalShardNotFound.java | 2 +- .../datastore/shardmanager/ShardManager.java | 1854 +++++++++++++++++ .../ShardManagerGetSnapshotReplyActor.java | 2 +- .../shardmanager/ShardManagerInfo.java | 10 +- .../ShardPeerAddressResolver.java | 2 +- ...ShardManagerGetSnapshotReplyActorTest.java | 3 +- .../{ => shardmanager}/ShardManagerTest.java | 16 +- .../ShardPeerAddressResolverTest.java | 2 +- 13 files changed, 1893 insertions(+), 1861 deletions(-) create mode 100644 opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardManager.java rename opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/{ => shardmanager}/ShardManagerGetSnapshotReplyActor.java (98%) rename opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/{jmx/mbeans => }/shardmanager/ShardManagerInfo.java (87%) rename opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/{ => shardmanager}/ShardPeerAddressResolver.java (98%) rename opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/{ => shardmanager}/ShardManagerGetSnapshotReplyActorTest.java (97%) rename opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/{ => shardmanager}/ShardManagerTest.java (99%) rename opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/{ => shardmanager}/ShardPeerAddressResolverTest.java (98%) diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStore.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStore.java index d31217042a..3dc4562acb 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStore.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DistributedDataStore.java @@ -20,6 +20,7 @@ import org.opendaylight.controller.cluster.datastore.identifiers.ShardManagerIde import org.opendaylight.controller.cluster.datastore.jmx.mbeans.DatastoreConfigurationMXBeanImpl; import org.opendaylight.controller.cluster.datastore.jmx.mbeans.DatastoreInfoMXBeanImpl; import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshot; +import org.opendaylight.controller.cluster.datastore.shardmanager.ShardManager; import org.opendaylight.controller.cluster.datastore.utils.ActorContext; import org.opendaylight.controller.cluster.datastore.utils.Dispatchers; import org.opendaylight.controller.cluster.datastore.utils.PrimaryShardInfoFutureCache; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java index fbf3c0bd9a..1978c5559b 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/Shard.java @@ -88,8 +88,8 @@ public class Shard extends RaftActor { @VisibleForTesting static final Object GET_SHARD_MBEAN_MESSAGE = "getShardMBeanMessage"; - @VisibleForTesting - static final String DEFAULT_NAME = "default"; + // FIXME: shard names should be encapsulated in their own class and this should be exposed as a constant. + public static final String DEFAULT_NAME = "default"; // The state of this Shard private final ShardDataTree store; diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java index 33b3810447..3eba622c84 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardManager.java @@ -5,1603 +5,27 @@ * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ +package org.opendaylight.controller.cluster.datastore; -package org.opendaylight.controller.cluster.datastore; - -import static akka.pattern.Patterns.ask; -import akka.actor.ActorRef; -import akka.actor.Address; -import akka.actor.Cancellable; -import akka.actor.OneForOneStrategy; -import akka.actor.PoisonPill; -import akka.actor.Props; -import akka.actor.Status; -import akka.actor.SupervisorStrategy; -import akka.cluster.ClusterEvent; -import akka.dispatch.Futures; -import akka.dispatch.OnComplete; -import akka.japi.Function; -import akka.pattern.Patterns; -import akka.persistence.RecoveryCompleted; -import akka.persistence.SaveSnapshotFailure; -import akka.persistence.SaveSnapshotSuccess; -import akka.persistence.SnapshotOffer; -import akka.persistence.SnapshotSelectionCriteria; -import akka.serialization.Serialization; -import akka.util.Timeout; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Objects; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; -import com.google.common.base.Supplier; -import com.google.common.collect.Sets; -import java.io.ByteArrayInputStream; -import java.io.ObjectInputStream; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import org.apache.commons.lang3.SerializationUtils; -import org.opendaylight.controller.cluster.common.actor.AbstractUntypedPersistentActorWithMetering; -import org.opendaylight.controller.cluster.datastore.config.Configuration; -import org.opendaylight.controller.cluster.datastore.config.ModuleShardConfiguration; -import org.opendaylight.controller.cluster.datastore.exceptions.AlreadyExistsException; -import org.opendaylight.controller.cluster.datastore.exceptions.NoShardLeaderException; -import org.opendaylight.controller.cluster.datastore.exceptions.NotInitializedException; -import org.opendaylight.controller.cluster.datastore.exceptions.PrimaryNotFoundException; -import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; -import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shardmanager.ShardManagerInfo; -import org.opendaylight.controller.cluster.datastore.jmx.mbeans.shardmanager.ShardManagerInfoMBean; -import org.opendaylight.controller.cluster.datastore.messages.ActorInitialized; -import org.opendaylight.controller.cluster.datastore.messages.AddShardReplica; -import org.opendaylight.controller.cluster.datastore.messages.CreateShard; -import org.opendaylight.controller.cluster.datastore.messages.DatastoreSnapshot; -import org.opendaylight.controller.cluster.datastore.messages.FindLocalShard; -import org.opendaylight.controller.cluster.datastore.messages.FindPrimary; -import org.opendaylight.controller.cluster.datastore.messages.LocalPrimaryShardFound; -import org.opendaylight.controller.cluster.datastore.messages.LocalShardFound; -import org.opendaylight.controller.cluster.datastore.messages.LocalShardNotFound; -import org.opendaylight.controller.cluster.datastore.messages.PeerAddressResolved; -import org.opendaylight.controller.cluster.datastore.messages.PeerDown; -import org.opendaylight.controller.cluster.datastore.messages.PeerUp; -import org.opendaylight.controller.cluster.datastore.messages.RemoteFindPrimary; -import org.opendaylight.controller.cluster.datastore.messages.RemotePrimaryShardFound; -import org.opendaylight.controller.cluster.datastore.messages.RemoveShardReplica; -import org.opendaylight.controller.cluster.datastore.messages.ShardLeaderStateChanged; -import org.opendaylight.controller.cluster.datastore.messages.SwitchShardBehavior; -import org.opendaylight.controller.cluster.datastore.messages.UpdateSchemaContext; -import org.opendaylight.controller.cluster.datastore.utils.Dispatchers; -import org.opendaylight.controller.cluster.datastore.utils.PrimaryShardInfoFutureCache; -import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListener; -import org.opendaylight.controller.cluster.notifications.RoleChangeNotification; -import org.opendaylight.controller.cluster.raft.RaftState; -import org.opendaylight.controller.cluster.raft.base.messages.FollowerInitialSyncUpStatus; -import org.opendaylight.controller.cluster.raft.base.messages.SwitchBehavior; -import org.opendaylight.controller.cluster.raft.client.messages.GetSnapshot; -import org.opendaylight.controller.cluster.raft.client.messages.Shutdown; -import org.opendaylight.controller.cluster.raft.messages.AddServer; -import org.opendaylight.controller.cluster.raft.messages.AddServerReply; -import org.opendaylight.controller.cluster.raft.messages.RemoveServer; -import org.opendaylight.controller.cluster.raft.messages.RemoveServerReply; -import org.opendaylight.controller.cluster.raft.messages.ServerChangeStatus; -import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; -import org.opendaylight.controller.cluster.raft.policy.DisableElectionsRaftPolicy; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import scala.concurrent.ExecutionContext; -import scala.concurrent.Future; -import scala.concurrent.duration.Duration; -import scala.concurrent.duration.FiniteDuration; - -/** - * The ShardManager has the following jobs, - *