X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2Fshardmanager%2FShardInformation.java;h=ac870905adcf1e781d49da672fb7561a22d6b2f9;hp=b2ac96e1641e81d9a7dd3430601840db2bdb0c4d;hb=HEAD;hpb=2d60632f7cf63712e8357a3cf3fc40d83366e5e6 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java index b2ac96e164..f5c94413c7 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/shardmanager/ShardInformation.java @@ -7,10 +7,12 @@ */ package org.opendaylight.controller.cluster.datastore.shardmanager; +import static java.util.Objects.requireNonNull; + import akka.actor.ActorRef; import akka.actor.Props; import akka.serialization.Serialization; -import com.google.common.base.Preconditions; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import java.util.HashSet; import java.util.Iterator; @@ -18,23 +20,21 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.Set; -import javax.annotation.Nullable; -import org.opendaylight.controller.cluster.access.concepts.MemberName; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.controller.cluster.datastore.DatastoreContext; import org.opendaylight.controller.cluster.datastore.Shard; import org.opendaylight.controller.cluster.datastore.identifiers.ShardIdentifier; 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.shardmanager.ShardManager.OnShardInitialized; import org.opendaylight.controller.cluster.datastore.shardmanager.ShardManager.OnShardReady; import org.opendaylight.controller.cluster.raft.RaftState; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; +import org.opendaylight.yangtools.yang.data.tree.api.ReadOnlyDataTree; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -final class ShardInformation { +@VisibleForTesting +public final class ShardInformation { private static final Logger LOG = LoggerFactory.getLogger(ShardInformation.class); private final Set onShardInitializedSet = new HashSet<>(); @@ -49,7 +49,7 @@ final class ShardInformation { private final AtomicShardContextProvider schemaContextProvider = new AtomicShardContextProvider(); private ActorRef actor; - private Optional localShardDataTree; + private Optional localShardDataTree; private boolean leaderAvailable = false; // flag that determines if the actor is ready for business @@ -77,9 +77,8 @@ final class ShardInformation { } Props newProps() { - Preconditions.checkNotNull(builder); - Props props = builder.id(shardId).peerAddresses(initialPeerAddresses).datastoreContext(datastoreContext) - .schemaContextProvider(schemaContextProvider).props(); + Props props = requireNonNull(builder).id(shardId).peerAddresses(initialPeerAddresses) + .datastoreContext(datastoreContext).schemaContextProvider(schemaContextProvider::modelContext).props(); builder = null; return props; } @@ -88,8 +87,8 @@ final class ShardInformation { return shardName; } - @Nullable - ActorRef getActor() { + @VisibleForTesting + @Nullable public ActorRef getActor() { return actor; } @@ -101,11 +100,11 @@ final class ShardInformation { return shardId; } - void setLocalDataTree(final Optional dataTree) { - this.localShardDataTree = dataTree; + void setLocalDataTree(final ReadOnlyDataTree dataTree) { + localShardDataTree = Optional.ofNullable(dataTree); } - Optional getLocalShardDataTree() { + Optional getLocalShardDataTree() { return localShardDataTree; } @@ -114,10 +113,10 @@ final class ShardInformation { } void setDatastoreContext(final DatastoreContext newDatastoreContext, final ActorRef sender) { - this.datastoreContext = newDatastoreContext; + datastoreContext = newDatastoreContext; if (actor != null) { LOG.debug("Sending new DatastoreContext to {}", shardId); - actor.tell(this.datastoreContext, sender); + actor.tell(datastoreContext, sender); } } @@ -134,18 +133,6 @@ final class ShardInformation { notifyOnShardInitializedCallbacks(); } - void peerDown(final MemberName memberName, final String peerId, final ActorRef sender) { - if (actor != null) { - actor.tell(new PeerDown(memberName, peerId), sender); - } - } - - void peerUp(final MemberName memberName, final String peerId, final ActorRef sender) { - if (actor != null) { - actor.tell(new PeerUp(memberName, peerId), sender); - } - } - boolean isShardReady() { return !RaftState.Candidate.name().equals(role) && !Strings.isNullOrEmpty(role); } @@ -165,17 +152,13 @@ final class ShardInformation { } String getSerializedLeaderActor() { - if (isLeader()) { - return Serialization.serializedActorPath(getActor()); - } else { - return addressResolver.resolve(leaderId); - } + return isLeader() ? Serialization.serializedActorPath(getActor()) : addressResolver.resolve(leaderId); } void setActorInitialized() { LOG.debug("Shard {} is initialized", shardId); - this.actorInitialized = true; + actorInitialized = true; notifyOnShardInitializedCallbacks(); } @@ -185,10 +168,10 @@ final class ShardInformation { return; } - boolean ready = isShardReadyWithLeaderId(); - - LOG.debug("Shard {} is {} - notifying {} OnShardInitialized callbacks", shardId, - ready ? "ready" : "initialized", onShardInitializedSet.size()); + final boolean ready = isShardReadyWithLeaderId(); + final String readyStr = ready ? "ready" : "initialized"; + LOG.debug("Shard {} is {} - notifying {} OnShardInitialized callbacks", shardId, readyStr, + onShardInitializedSet.size()); Iterator iter = onShardInitializedSet.iterator(); while (iter.hasNext()) { @@ -210,7 +193,7 @@ final class ShardInformation { } void setRole(final String newRole) { - this.role = newRole; + role = newRole; notifyOnShardInitializedCallbacks(); } @@ -220,13 +203,13 @@ final class ShardInformation { } void setFollowerSyncStatus(final boolean syncStatus) { - this.followerSyncStatus = syncStatus; + followerSyncStatus = syncStatus; } boolean isInSync() { - if (RaftState.Follower.name().equals(this.role)) { + if (RaftState.Follower.name().equals(role)) { return followerSyncStatus; - } else if (RaftState.Leader.name().equals(this.role)) { + } else if (RaftState.Leader.name().equals(role)) { return true; } @@ -234,10 +217,10 @@ final class ShardInformation { } boolean setLeaderId(final String newLeaderId) { - final boolean changed = !Objects.equals(this.leaderId, newLeaderId); - this.leaderId = newLeaderId; + final boolean changed = !Objects.equals(leaderId, newLeaderId); + leaderId = newLeaderId; if (newLeaderId != null) { - this.leaderAvailable = true; + leaderAvailable = true; } notifyOnShardInitializedCallbacks(); @@ -269,14 +252,28 @@ final class ShardInformation { } void setActiveMember(final boolean isActiveMember) { - this.activeMember = isActiveMember; + activeMember = isActiveMember; + } + + EffectiveModelContext getSchemaContext() { + return schemaContextProvider.modelContext(); } - SchemaContext getSchemaContext() { - return schemaContextProvider.getSchemaContext(); + void setSchemaContext(final EffectiveModelContext schemaContext) { + schemaContextProvider.set(requireNonNull(schemaContext)); } - void setSchemaContext(final SchemaContext schemaContext) { - schemaContextProvider.set(Preconditions.checkNotNull(schemaContext)); + @VisibleForTesting + Shard.AbstractBuilder getBuilder() { + return builder; } + + @Override + public String toString() { + return "ShardInformation [shardId=" + shardId + ", leaderAvailable=" + leaderAvailable + ", actorInitialized=" + + actorInitialized + ", followerSyncStatus=" + followerSyncStatus + ", role=" + role + ", leaderId=" + + leaderId + ", activeMember=" + activeMember + "]"; + } + + }