Class DistributedShardedDOMDataTree
- java.lang.Object
-
- org.opendaylight.controller.cluster.sharding.DistributedShardedDOMDataTree
-
- All Implemented Interfaces:
DistributedShardFactory,org.opendaylight.mdsal.dom.api.DOMDataTreeProducerFactory,org.opendaylight.mdsal.dom.api.DOMDataTreeService,org.opendaylight.mdsal.dom.api.DOMDataTreeShardingService,org.opendaylight.mdsal.dom.api.DOMExtensibleService<org.opendaylight.mdsal.dom.api.DOMDataTreeService,org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension>,org.opendaylight.mdsal.dom.api.DOMService
public class DistributedShardedDOMDataTree extends Object implements org.opendaylight.mdsal.dom.api.DOMDataTreeService, org.opendaylight.mdsal.dom.api.DOMDataTreeShardingService, DistributedShardFactory
A layer on top of DOMDataTreeService that distributes producer/shard registrations to remote nodes viaShardedDataTreeActor. Also provides QoL method for addition of prefix based clustered shard into the system.
-
-
Constructor Summary
Constructors Constructor Description DistributedShardedDOMDataTree(org.opendaylight.controller.cluster.ActorSystemProvider actorSystemProvider, AbstractDataStore distributedOperDatastore, AbstractDataStore distributedConfigDatastore)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description CompletionStage<DistributedShardRegistration>createDistributedShard(org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier prefix, Collection<org.opendaylight.controller.cluster.access.concepts.MemberName> replicaMembers)Register a new shard that is rooted at the desired prefix with replicas on the provided members.org.opendaylight.mdsal.dom.api.DOMDataTreeProducercreateProducer(Collection<org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier> subtrees)com.google.common.collect.ClassToInstanceMap<org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension>getExtensions()voidinit()This will try to initialize prefix configuration shards upon their successful start.<T extends org.opendaylight.mdsal.dom.api.DOMDataTreeShard>
org.opendaylight.yangtools.concepts.ListenerRegistration<T>registerDataTreeShard(org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier prefix, T shard, org.opendaylight.mdsal.dom.api.DOMDataTreeProducer producer)<T extends org.opendaylight.mdsal.dom.api.DOMDataTreeListener>
org.opendaylight.yangtools.concepts.ListenerRegistration<T>registerListener(T listener, Collection<org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier> subtrees, boolean allowRxMerges, Collection<org.opendaylight.mdsal.dom.api.DOMDataTreeProducer> producers)
-
-
-
Constructor Detail
-
DistributedShardedDOMDataTree
public DistributedShardedDOMDataTree(org.opendaylight.controller.cluster.ActorSystemProvider actorSystemProvider, AbstractDataStore distributedOperDatastore, AbstractDataStore distributedConfigDatastore)
-
-
Method Detail
-
init
public void init()
This will try to initialize prefix configuration shards upon their successful start. We need to create writers to these shards, so we can satisfy futurecreateDistributedShard(org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier, java.util.Collection<org.opendaylight.controller.cluster.access.concepts.MemberName>)andresolveShardAdditions(java.util.Set<org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier>)requests and update prefix configuration shards accordingly.We also need to initialize listeners on these shards, so we can react on changes made on them by other cluster members or even by ourselves.
Finally, we need to be sure that default shards for both operational and configuration data stores are up and running and we have distributed shards frontend created for them.
This is intended to be invoked by blueprint as initialization method.
-
registerListener
public <T extends org.opendaylight.mdsal.dom.api.DOMDataTreeListener> org.opendaylight.yangtools.concepts.ListenerRegistration<T> registerListener(T listener, Collection<org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier> subtrees, boolean allowRxMerges, Collection<org.opendaylight.mdsal.dom.api.DOMDataTreeProducer> producers) throws org.opendaylight.mdsal.dom.api.DOMDataTreeLoopException- Specified by:
registerListenerin interfaceorg.opendaylight.mdsal.dom.api.DOMDataTreeService- Throws:
org.opendaylight.mdsal.dom.api.DOMDataTreeLoopException
-
getExtensions
public com.google.common.collect.ClassToInstanceMap<org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension> getExtensions()
- Specified by:
getExtensionsin interfaceorg.opendaylight.mdsal.dom.api.DOMExtensibleService<org.opendaylight.mdsal.dom.api.DOMDataTreeService,org.opendaylight.mdsal.dom.api.DOMDataTreeServiceExtension>
-
createProducer
public org.opendaylight.mdsal.dom.api.DOMDataTreeProducer createProducer(Collection<org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier> subtrees)
- Specified by:
createProducerin interfaceorg.opendaylight.mdsal.dom.api.DOMDataTreeProducerFactory
-
createDistributedShard
public CompletionStage<DistributedShardRegistration> createDistributedShard(org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier prefix, Collection<org.opendaylight.controller.cluster.access.concepts.MemberName> replicaMembers) throws org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException
Description copied from interface:DistributedShardFactoryRegister a new shard that is rooted at the desired prefix with replicas on the provided members. Note to register a shard without replicas you still need to provide at least one Member for the shard.- Specified by:
createDistributedShardin interfaceDistributedShardFactory- Parameters:
prefix- Shard rootreplicaMembers- Members that this shard is replicated on, has to have at least one Member even if the shard should not be replicated.- Returns:
- A future that will be completed with a DistributedShardRegistration once the backend and frontend shards are spawned.
- Throws:
org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException- If the initial check for a conflict on the local node fails, the sharding configuration won't be updated if this exception is thrown.
-
registerDataTreeShard
public <T extends org.opendaylight.mdsal.dom.api.DOMDataTreeShard> org.opendaylight.yangtools.concepts.ListenerRegistration<T> registerDataTreeShard(org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier prefix, T shard, org.opendaylight.mdsal.dom.api.DOMDataTreeProducer producer) throws org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException- Specified by:
registerDataTreeShardin interfaceorg.opendaylight.mdsal.dom.api.DOMDataTreeShardingService- Throws:
org.opendaylight.mdsal.dom.api.DOMDataTreeShardingConflictException
-
-