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%2FInMemoryDOMDataStore.java;h=6ed525f1ae0323240b78a23e06cb687dbd064f8e;hb=11408d627adca7eb71ac956c3ad01f75b6b91596;hp=61dbb025d073a97e13ee10cad2d88a36cffb1147;hpb=c241dcfa5322ac10810a1068ccd2eb57f6f2dbb2;p=mdsal.git diff --git a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java index 61dbb025d0..6ed525f1ae 100644 --- a/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java +++ b/dom/mdsal-dom-inmemory-datastore/src/main/java/org/opendaylight/mdsal/dom/store/inmemory/InMemoryDOMDataStore.java @@ -7,10 +7,12 @@ */ package org.opendaylight.mdsal.dom.store.inmemory; -import com.google.common.base.Preconditions; +import static java.util.Objects.requireNonNull; + import java.util.concurrent.ExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.mdsal.dom.api.DOMDataTreeChangeListener; import org.opendaylight.mdsal.dom.spi.store.DOMStore; import org.opendaylight.mdsal.dom.spi.store.DOMStoreReadTransaction; @@ -25,36 +27,31 @@ import org.opendaylight.mdsal.dom.spi.store.SnapshotBackedWriteTransaction.Trans import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.util.ExecutorServiceUtil; -import org.opendaylight.yangtools.util.concurrent.QueuedNotificationManager; +import org.opendaylight.yangtools.util.concurrent.EqualityQueuedNotificationManager; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTree; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeConfiguration; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeSnapshot; -import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; -import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; +import org.opendaylight.yangtools.yang.data.tree.api.DataTree; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeCandidate; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeConfiguration; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeModification; +import org.opendaylight.yangtools.yang.data.tree.api.DataTreeSnapshot; +import org.opendaylight.yangtools.yang.data.tree.api.DataValidationFailedException; +import org.opendaylight.yangtools.yang.data.tree.impl.di.InMemoryDataTreeFactory; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** - * In-memory DOM Data Store. - * - *

- * Implementation of {@link DOMStore} which uses {@link DataTree} and other - * classes such as {@link SnapshotBackedWriteTransaction}. - * {@link org.opendaylight.mdsal.dom.spi.store.SnapshotBackedReadTransaction} to implement {@link DOMStore} - * contract. - * + * In-memory DOM Data Store. Implementation of {@link DOMStore} which uses {@link DataTree} and other classes such as + * {@link SnapshotBackedWriteTransaction}. + * {@link org.opendaylight.mdsal.dom.spi.store.SnapshotBackedReadTransaction} to implement {@link DOMStore} contract. */ public class InMemoryDOMDataStore extends TransactionReadyPrototype implements DOMStore, - Identifiable, SchemaContextListener, AutoCloseable, DOMStoreTreeChangePublisher { + Identifiable, EffectiveModelContextListener, AutoCloseable, DOMStoreTreeChangePublisher { private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMDataStore.class); - private final DataTree dataTree = new InMemoryDataTreeFactory().create(DataTreeConfiguration.DEFAULT_OPERATIONAL); private final AtomicLong txCounter = new AtomicLong(0); + private final DataTree dataTree; private final InMemoryDOMStoreTreeChangePublisher changePublisher; private final ExecutorService dataChangeListenerExecutor; @@ -65,19 +62,33 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl public InMemoryDOMDataStore(final String name, final ExecutorService dataChangeListenerExecutor) { this(name, dataChangeListenerExecutor, - InMemoryDOMDataStoreConfigProperties.DEFAULT_MAX_DATA_CHANGE_LISTENER_QUEUE_SIZE, false); + InMemoryDOMDataStoreConfigProperties.DEFAULT_MAX_DATA_CHANGE_LISTENER_QUEUE_SIZE, false); } public InMemoryDOMDataStore(final String name, final ExecutorService dataChangeListenerExecutor, final int maxDataChangeListenerQueueSize, final boolean debugTransactions) { - this.name = Preconditions.checkNotNull(name); - this.dataChangeListenerExecutor = Preconditions.checkNotNull(dataChangeListenerExecutor); + this(name, LogicalDatastoreType.OPERATIONAL, dataChangeListenerExecutor, maxDataChangeListenerQueueSize, + debugTransactions); + } + + public InMemoryDOMDataStore(final String name, final LogicalDatastoreType type, + final ExecutorService dataChangeListenerExecutor, final int maxDataChangeListenerQueueSize, + final boolean debugTransactions) { + this(name, defaultConfig(type), dataChangeListenerExecutor, maxDataChangeListenerQueueSize, debugTransactions); + } + + public InMemoryDOMDataStore(final String name, final DataTreeConfiguration config, + final ExecutorService dataChangeListenerExecutor, final int maxDataChangeListenerQueueSize, + final boolean debugTransactions) { + this.name = requireNonNull(name); + this.dataChangeListenerExecutor = requireNonNull(dataChangeListenerExecutor); this.debugTransactions = debugTransactions; - changePublisher = new InMemoryDOMStoreTreeChangePublisher(this.dataChangeListenerExecutor, + dataTree = new InMemoryDataTreeFactory().create(config); + changePublisher = new InMemoryDOMStoreTreeChangePublisher("name", this.dataChangeListenerExecutor, maxDataChangeListenerQueueSize); } - public QueuedNotificationManager getDataChangeListenerNotificationManager() { + public EqualityQueuedNotificationManager getDataChangeListenerNotificationManager() { return changePublisher.getNotificationManager(); } @@ -92,20 +103,20 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl @Override public DOMStoreReadTransaction newReadOnlyTransaction() { - return SnapshotBackedTransactions.newReadTransaction( - nextIdentifier(),debugTransactions, dataTree.takeSnapshot()); + return SnapshotBackedTransactions.newReadTransaction(nextIdentifier(), debugTransactions, + dataTree.takeSnapshot()); } @Override public DOMStoreReadWriteTransaction newReadWriteTransaction() { - return SnapshotBackedTransactions.newReadWriteTransaction(nextIdentifier(), - debugTransactions, dataTree.takeSnapshot(), this); + return SnapshotBackedTransactions.newReadWriteTransaction(nextIdentifier(), debugTransactions, + dataTree.takeSnapshot(), this); } @Override public DOMStoreWriteTransaction newWriteOnlyTransaction() { - return SnapshotBackedTransactions.newWriteTransaction(nextIdentifier(), - debugTransactions, dataTree.takeSnapshot(), this); + return SnapshotBackedTransactions.newWriteTransaction(nextIdentifier(), debugTransactions, + dataTree.takeSnapshot(), this); } @Override @@ -114,8 +125,8 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl } @Override - public synchronized void onGlobalContextUpdated(final SchemaContext ctx) { - dataTree.setSchemaContext(ctx); + public synchronized void onModelContextUpdated(final EffectiveModelContext newModelContext) { + dataTree.setEffectiveModelContext(newModelContext); } @SuppressWarnings("checkstyle:IllegalCatch") @@ -157,8 +168,7 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl @Override protected DOMStoreThreePhaseCommitCohort transactionReady(final SnapshotBackedWriteTransaction tx, - final DataTreeModification modification, - final Exception readyError) { + final DataTreeModification modification, final Exception readyError) { LOG.debug("Tx: {} is submitted. Modifications: {}", tx.getIdentifier(), modification); return new InMemoryDOMStoreThreePhaseCommitCohort(this, tx, modification, readyError); } @@ -171,7 +181,7 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl dataTree.validate(modification); } - DataTreeCandidate prepare(final DataTreeModification modification) { + DataTreeCandidate prepare(final DataTreeModification modification) throws DataValidationFailedException { return dataTree.prepare(modification); } @@ -179,4 +189,15 @@ public class InMemoryDOMDataStore extends TransactionReadyPrototype impl dataTree.commit(candidate); changePublisher.publishChange(candidate); } + + private static DataTreeConfiguration defaultConfig(final LogicalDatastoreType type) { + switch (type) { + case CONFIGURATION: + return DataTreeConfiguration.DEFAULT_CONFIGURATION; + case OPERATIONAL: + return DataTreeConfiguration.DEFAULT_OPERATIONAL; + default: + throw new IllegalArgumentException("Unhandled datastore type " + type); + } + } }