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%2Fsharding%2FDistributedShardedDOMDataTree.java;h=6e53a2791234977ce4e8362fbc07f01d79d88af5;hp=30b46e52ff7959106489e98181420586f049d6b0;hb=ef3b9a8300db1c791f2c4088d39152ccf9f5b97c;hpb=149feb98f151186975fe42bab5853e05aafd4b51 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTree.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTree.java index 30b46e52ff..6e53a27912 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTree.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/sharding/DistributedShardedDOMDataTree.java @@ -18,6 +18,7 @@ import akka.dispatch.Mapper; import akka.dispatch.OnComplete; import akka.pattern.Patterns; import akka.util.Timeout; +import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Throwables; import com.google.common.collect.ForwardingObject; @@ -518,6 +519,25 @@ public class DistributedShardedDOMDataTree implements DOMDataTreeService, DOMDat shardedDataTreeActor, this); } else { try { + // There can be situation when there is already started default shard + // because it is present in modules.conf. In that case we have to create + // just frontend for default shard, but not shard itself + // TODO we don't have to do it for config and operational default shard + // separately. Just one of them should be enough + final ActorContext actorContext = logicalDatastoreType == LogicalDatastoreType.CONFIGURATION + ? distributedConfigDatastore.getActorContext() : distributedOperDatastore.getActorContext(); + + final Optional defaultLocalShardOptional = + actorContext.findLocalShard(ClusterUtils.getCleanShardName(YangInstanceIdentifier.EMPTY)); + + if (defaultLocalShardOptional.isPresent()) { + LOG.debug("{} Default shard is already started, creating just frontend", logicalDatastoreType); + createShardFrontend(new DOMDataTreeIdentifier(logicalDatastoreType, YangInstanceIdentifier.EMPTY)); + return new DistributedShardRegistrationImpl( + new DOMDataTreeIdentifier(logicalDatastoreType, YangInstanceIdentifier.EMPTY), + shardedDataTreeActor, this); + } + // we should probably only have one node create the default shards return Await.result(FutureConverters.toScala(createDistributedShard( new DOMDataTreeIdentifier(logicalDatastoreType, YangInstanceIdentifier.EMPTY), names)),