X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-dom-broker%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fsal%2Fdom%2Fstore%2Fimpl%2FInMemoryDOMDataStore.java;h=87c68596efa60a668a7afe005d482eefac1f6ad7;hp=7d647af53907242e9c06dec14dcfa81e05c2fad6;hb=0552aa7d15d9482a9c24062786a743adca4ab74a;hpb=8d160966fa8752235d01bb8dc57c11391b86f187 diff --git a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java index 7d647af539..87c68596ef 100644 --- a/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java +++ b/opendaylight/md-sal/sal-dom-broker/src/main/java/org/opendaylight/controller/md/sal/dom/store/impl/InMemoryDOMDataStore.java @@ -22,21 +22,18 @@ import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeCandidate; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeModification; import org.opendaylight.controller.md.sal.dom.store.impl.tree.DataTreeSnapshot; import org.opendaylight.controller.md.sal.dom.store.impl.tree.ListenerTree; -import org.opendaylight.controller.md.sal.dom.store.impl.tree.ModificationApplyOperation; import org.opendaylight.controller.md.sal.dom.store.impl.tree.data.InMemoryDataTreeFactory; -import org.opendaylight.controller.md.sal.dom.store.impl.tree.data.NodeModification; -import org.opendaylight.controller.md.sal.dom.store.impl.tree.data.StoreMetadataNode; import org.opendaylight.controller.sal.core.spi.data.DOMStore; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransaction; import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort; import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransaction; +import org.opendaylight.controller.sal.core.spi.data.DOMStoreTransactionChain; import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction; import org.opendaylight.yangtools.concepts.AbstractListenerRegistration; import org.opendaylight.yangtools.concepts.Identifiable; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; -import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.api.SchemaContextListener; @@ -47,22 +44,17 @@ import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.primitives.UnsignedLong; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; public class InMemoryDOMDataStore implements DOMStore, Identifiable, SchemaContextListener { - private static final Logger LOG = LoggerFactory.getLogger(InMemoryDOMDataStore.class); - private static final InstanceIdentifier PUBLIC_ROOT_PATH = InstanceIdentifier.builder().build(); - + private final DataTree dataTree = InMemoryDataTreeFactory.getInstance().create(); + private final ListenerTree listenerTree = ListenerTree.create(); + private final AtomicLong txCounter = new AtomicLong(0); private final ListeningExecutorService executor; private final String name; - private final AtomicLong txCounter = new AtomicLong(0); - private final ListenerTree listenerTree = ListenerTree.create(); - private final DataTree dataTree = InMemoryDataTreeFactory.getInstance().create(); - private ModificationApplyOperation operationTree = new AlwaysFailOperation(); public InMemoryDOMDataStore(final String name, final ListeningExecutorService executor) { this.name = Preconditions.checkNotNull(name); @@ -81,25 +73,22 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch @Override public DOMStoreReadWriteTransaction newReadWriteTransaction() { - return new SnapshotBackedReadWriteTransaction(nextIdentifier(), dataTree.takeSnapshot(), this, operationTree); + return new SnapshotBackedReadWriteTransaction(nextIdentifier(), dataTree.takeSnapshot(), this); } @Override public DOMStoreWriteTransaction newWriteOnlyTransaction() { - return new SnapshotBackedWriteTransaction(nextIdentifier(), dataTree.takeSnapshot(), this, operationTree); + return new SnapshotBackedWriteTransaction(nextIdentifier(), dataTree.takeSnapshot(), this); + } + + @Override + public DOMStoreTransactionChain createTransactionChain() { + throw new UnsupportedOperationException("Not implemented yet."); } @Override public synchronized void onGlobalContextUpdated(final SchemaContext ctx) { - /* - * Order of operations is important: dataTree may reject the context - * and creation of ModificationApplyOperation may fail. So pre-construct - * the operation, then update the data tree and then move the operation - * into view. - */ - final ModificationApplyOperation newOperationTree = SchemaAwareApplyOperationRoot.from(ctx); dataTree.setSchemaContext(ctx); - operationTree = newOperationTree; } @Override @@ -180,7 +169,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch } private static final class SnapshotBackedReadTransaction extends AbstractDOMStoreTransaction implements - DOMStoreReadTransaction { + DOMStoreReadTransaction { private DataTreeSnapshot stableSnapshot; public SnapshotBackedReadTransaction(final Object identifier, final DataTreeSnapshot snapshot) { @@ -204,15 +193,15 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch } private static class SnapshotBackedWriteTransaction extends AbstractDOMStoreTransaction implements - DOMStoreWriteTransaction { + DOMStoreWriteTransaction { private DataTreeModification mutableTree; private InMemoryDOMDataStore store; private boolean ready = false; public SnapshotBackedWriteTransaction(final Object identifier, final DataTreeSnapshot snapshot, - final InMemoryDOMDataStore store, final ModificationApplyOperation applyOper) { + final InMemoryDOMDataStore store) { super(identifier); - mutableTree = snapshot.newModification(applyOper); + mutableTree = snapshot.newModification(); this.store = store; LOG.debug("Write Tx: {} allocated with snapshot {}", identifier, snapshot); } @@ -274,7 +263,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch ready = true; LOG.debug("Store transaction: {} : Ready", getIdentifier()); - mutableTree.seal(); + mutableTree.ready(); return store.submit(this); } @@ -289,11 +278,11 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch } private static class SnapshotBackedReadWriteTransaction extends SnapshotBackedWriteTransaction implements - DOMStoreReadWriteTransaction { + DOMStoreReadWriteTransaction { protected SnapshotBackedReadWriteTransaction(final Object identifier, final DataTreeSnapshot snapshot, - final InMemoryDOMDataStore store, final ModificationApplyOperation applyOper) { - super(identifier, snapshot, store, applyOper); + final InMemoryDOMDataStore store) { + super(identifier, snapshot, store); } @Override @@ -327,7 +316,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch @Override public Boolean call() { try { - dataTree.validate(modification); + dataTree.validate(modification); LOG.debug("Store Transaction: {} can be committed", transaction.getIdentifier()); return true; } catch (DataPreconditionFailedException e) { @@ -343,16 +332,8 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch return executor.submit(new Callable() { @Override public Void call() { - candidate = dataTree.prepare(modification); - + candidate = dataTree.prepare(modification); listenerResolver = ResolveDataChangeEventsTask.create(candidate, listenerTree); - -// .setRootPath(PUBLIC_ROOT_PATH) // -// .setBeforeRoot(Optional.of(metadataTree)) // -// .setAfterRoot(proposedSubtree) // -// .setModificationRoot(modification.getRootModification()) // -// .setListenerRoot(listenerTree); - return null; } }); @@ -360,12 +341,8 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch @Override public ListenableFuture abort() { - if (candidate != null) { - candidate.close(); - candidate = null; - } - - return Futures. immediateFuture(null); + candidate = null; + return Futures.immediateFuture(null); } @Override @@ -385,32 +362,7 @@ public class InMemoryDOMDataStore implements DOMStore, Identifiable, Sch } } - return Futures. immediateFuture(null); - } - } - - private static final class AlwaysFailOperation implements ModificationApplyOperation { - - @Override - public Optional apply(final NodeModification modification, - final Optional storeMeta, final UnsignedLong subtreeVersion) { - throw new IllegalStateException("Schema Context is not available."); - } - - @Override - public void checkApplicable(final InstanceIdentifier path,final NodeModification modification, final Optional storeMetadata) { - throw new IllegalStateException("Schema Context is not available."); - } - - @Override - public Optional getChild(final PathArgument child) { - throw new IllegalStateException("Schema Context is not available."); + return Futures.immediateFuture(null); } - - @Override - public void verifyStructure(final NodeModification modification) throws IllegalArgumentException { - throw new IllegalStateException("Schema Context is not available."); - } - } }