X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=dom%2Fmdsal-dom-inmemory-datastore%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fdom%2Fstore%2Finmemory%2FInMemoryDOMDataTreeShard.java;h=f518346daad47f84cf1ac26bcc1e3d05fcdc76f1;hb=2edcadb19348d7ad4f9d6b00c96ddce2d0320214;hp=051d658a129ffc93ed5b212059630f6e3c9490a7;hpb=1ed67da6416e25cfd5a8270b4875cac3a3764634;p=mdsal.git diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java index 051d658a12..f518346daa 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataTreeShard.java @@ -11,6 +11,8 @@ package org.opendaylight.mdsal.dom.store.inmemory; import com.google.common.annotations.Beta; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; +import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -18,6 +20,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import javax.annotation.Nonnull; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; @@ -57,14 +60,11 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha } private final DOMDataTreePrefixTable childShardsTable = DOMDataTreePrefixTable.create(); - private final Map childShards = new HashMap<>(); - private final DOMDataTreeIdentifier prefix; private final DataTree dataTree; - - private SchemaContext schemaContext; - private InMemoryDOMDataTreeShardChangePublisher shardChangePublisher; + private final InMemoryDOMDataTreeShardChangePublisher shardChangePublisher; + private final ListeningExecutorService executor; private InMemoryDOMDataTreeShard(final DOMDataTreeIdentifier prefix, final ExecutorService dataTreeChangeExecutor, final int maxDataChangeListenerQueueSize) { @@ -74,6 +74,7 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha this.dataTree = InMemoryDataTreeFactory.getInstance().create(treeType, prefix.getRootIdentifier()); this.shardChangePublisher = new InMemoryDOMDataTreeShardChangePublisher(dataTreeChangeExecutor, maxDataChangeListenerQueueSize, dataTree, prefix.getRootIdentifier(), childShards); + this.executor = MoreExecutors.listeningDecorator(Executors.newSingleThreadExecutor()); } public static InMemoryDOMDataTreeShard create(final DOMDataTreeIdentifier id, final ExecutorService dataTreeChangeExecutor, @@ -84,7 +85,6 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha @Override public void onGlobalContextUpdated(final SchemaContext context) { dataTree.setSchemaContext(context); - schemaContext = context; } @Override @@ -97,11 +97,12 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha @Override public void onChildDetached(final DOMDataTreeIdentifier prefix, final DOMDataTreeShard child) { childShards.remove(prefix); + childShardsTable.remove(prefix); } @Override public InMemoryDOMDataTreeShardProducer createProducer(final Collection prefixes) { - for (DOMDataTreeIdentifier prodPrefix : prefixes) { + for (final DOMDataTreeIdentifier prodPrefix : prefixes) { Preconditions.checkArgument(prefix.contains(prodPrefix), "Prefix %s is not contained under shart root", prodPrefix, prefix); } @@ -115,21 +116,21 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha } private void addChildShard(final DOMDataTreeIdentifier prefix, final DOMDataTreeShard child) { - ChildShardContext context = createContextFor(prefix, child); + final ChildShardContext context = createContextFor(prefix, child); childShards.put(prefix, context); childShardsTable.store(prefix, context); } private void reparentChildShards(final DOMDataTreeIdentifier newChildPrefix, final DOMDataTreeShard newChild) { - Iterator> actualChildren = childShards.entrySet().iterator(); - Map reparented = new HashMap<>(); + final Iterator> actualChildren = childShards.entrySet().iterator(); + final Map reparented = new HashMap<>(); while (actualChildren.hasNext()) { final Entry actualChild = actualChildren.next(); final DOMDataTreeIdentifier actualPrefix = actualChild.getKey(); Preconditions.checkArgument(!newChildPrefix.equals(actualPrefix), "Child shard with prefix %s already attached", newChildPrefix); if (newChildPrefix.contains(actualPrefix)) { - ChildShardContext actualContext = actualChild.getValue(); + final ChildShardContext actualContext = actualChild.getValue(); actualChildren.remove(); newChild.onChildAttached(actualPrefix, actualContext.getShard()); reparented.put(actualChild.getKey(), actualContext); @@ -167,8 +168,8 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha @VisibleForTesting Map getChildShards() { - Map ret = new HashMap<>(); - for (Entry entry : childShards.entrySet()) { + final Map ret = new HashMap<>(); + for (final Entry entry : childShards.entrySet()) { ret.put(entry.getKey(), entry.getValue().getShard()); } return ret; @@ -181,9 +182,9 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha InmemoryDOMDataTreeShardWriteTransaction createTransaction(final Collection prefixes) { - Map affectedSubshards = new HashMap<>(); - for (DOMDataTreeIdentifier producerPrefix : prefixes) { - for (ChildShardContext maybeAffected : childShards.values()) { + final Map affectedSubshards = new HashMap<>(); + for (final DOMDataTreeIdentifier producerPrefix : prefixes) { + for (final ChildShardContext maybeAffected : childShards.values()) { final DOMDataTreeIdentifier bindPath; if (producerPrefix.contains(maybeAffected.getPrefix())) { bindPath = maybeAffected.getPrefix(); @@ -203,16 +204,16 @@ public class InMemoryDOMDataTreeShard implements ReadableWriteableDOMDataTreeSha } } - ShardRootModificationContext rootContext = new ShardRootModificationContext(prefix, + final ShardRootModificationContext rootContext = new ShardRootModificationContext(prefix, (CursorAwareDataTreeSnapshot) dataTree.takeSnapshot()); - ShardDataModificationBuilder builder = new ShardDataModificationBuilder(rootContext); - for (SubshardProducerSpecification spec : affectedSubshards.values()) { - ForeignShardModificationContext foreignContext = + final ShardDataModificationBuilder builder = new ShardDataModificationBuilder(rootContext); + for (final SubshardProducerSpecification spec : affectedSubshards.values()) { + final ForeignShardModificationContext foreignContext = new ForeignShardModificationContext(spec.getPrefix(), spec.createProducer()); builder.addSubshard(foreignContext); builder.addSubshard(spec.getPrefix(), foreignContext); } - return new InmemoryDOMDataTreeShardWriteTransaction(builder.build(), dataTree, shardChangePublisher); + return new InmemoryDOMDataTreeShardWriteTransaction(builder.build(), dataTree, shardChangePublisher, executor); } }