From: Tony Tkacik Date: Wed, 15 Apr 2015 14:49:44 +0000 (+0000) Subject: Merge "BUG-2953: do not use a complete InMemoryDataStore" X-Git-Tag: release/lithium~266 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=commitdiff_plain;h=a7e57cf252c2a19a1acfbc23402eed634ae2ac5a;hp=745d7a11635b81af7b4e1f1303db071c6c6b198d Merge "BUG-2953: do not use a complete InMemoryDataStore" --- diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionProxy.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionProxy.java index a0987cd5d6..71799c92d4 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionProxy.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/TransactionProxy.java @@ -40,6 +40,7 @@ import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadWriteTransactio import org.opendaylight.yangtools.util.concurrent.MappingCheckedFuture; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -219,7 +220,7 @@ public class TransactionProxy extends AbstractDOMStoreTransaction>> nodes; - private final InMemoryDOMDataStore dataStore; - - NormalizedNodeAggregator(YangInstanceIdentifier rootIdentifier, List>> nodes, - SchemaContext schemaContext){ + private final DataTree dataTree; + private NormalizedNodeAggregator(YangInstanceIdentifier rootIdentifier, List>> nodes, + SchemaContext schemaContext) { this.rootIdentifier = rootIdentifier; this.nodes = nodes; - this.dataStore = new InMemoryDOMDataStore("aggregator", executorService); - this.dataStore.onGlobalContextUpdated(schemaContext); + this.dataTree = InMemoryDataTreeFactory.getInstance().create(); + this.dataTree.setSchemaContext(schemaContext); } /** @@ -46,44 +37,35 @@ public class NormalizedNodeAggregator { * @param nodes * @param schemaContext * @return - * @throws ExecutionException - * @throws InterruptedException + * @throws DataValidationFailedException */ public static Optional> aggregate(YangInstanceIdentifier rootIdentifier, List>> nodes, - SchemaContext schemaContext) - throws ExecutionException, InterruptedException { + SchemaContext schemaContext) throws DataValidationFailedException { return new NormalizedNodeAggregator(rootIdentifier, nodes, schemaContext).aggregate(); } - private Optional> aggregate() throws ExecutionException, InterruptedException { + private Optional> aggregate() throws DataValidationFailedException { return combine().getRootNode(); } - private NormalizedNodeAggregator combine() throws InterruptedException, ExecutionException { - DOMStoreWriteTransaction domStoreWriteTransaction = dataStore.newWriteOnlyTransaction(); + private NormalizedNodeAggregator combine() throws DataValidationFailedException { + DataTreeModification mod = dataTree.takeSnapshot().newModification(); - for(Optional> node : nodes) { - if(node.isPresent()) { - domStoreWriteTransaction.merge(rootIdentifier, node.get()); + for (Optional> node : nodes) { + if (node.isPresent()) { + mod.merge(rootIdentifier, node.get()); } } - DOMStoreThreePhaseCommitCohort ready = domStoreWriteTransaction.ready(); - ready.canCommit().get(); - ready.preCommit().get(); - ready.commit().get(); + + dataTree.validate(mod); + final DataTreeCandidate candidate = dataTree.prepare(mod); + dataTree.commit(candidate); return this; } - private Optional> getRootNode() throws InterruptedException, ExecutionException { - DOMStoreReadTransaction readTransaction = dataStore.newReadOnlyTransaction(); - - CheckedFuture>, ReadFailedException> read = - readTransaction.read(rootIdentifier); - - return read.get(); + private Optional> getRootNode() { + return dataTree.takeSnapshot().readNode(rootIdentifier); } - - } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregatorTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregatorTest.java index 40d3704d2c..8c8631089c 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregatorTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/utils/NormalizedNodeAggregatorTest.java @@ -29,13 +29,14 @@ import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import org.opendaylight.yangtools.yang.data.api.schema.tree.DataValidationFailedException; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.SchemaContext; public class NormalizedNodeAggregatorTest { @Test - public void testAggregate() throws InterruptedException, ExecutionException, ReadFailedException { + public void testAggregate() throws InterruptedException, ExecutionException, ReadFailedException, DataValidationFailedException { SchemaContext schemaContext = SchemaContextHelper.full(); NormalizedNode expectedNode1 = ImmutableNodes.containerNode(TestModel.TEST_QNAME); NormalizedNode expectedNode2 = ImmutableNodes.containerNode(CarsModel.CARS_QNAME);