Aggregator functionality does not require sequencing or listener, but
rather simple manipulation. Instantiate a DataTree instead, simplifying
the class.
Change-Id: I1edc38f0722ddbd1145149bbc5efef5ab41b0146
Signed-off-by: Robert Varga <rovarga@cisco.com>
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.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;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
try {
proxyFuture.set(NormalizedNodeAggregator.aggregate(YangInstanceIdentifier.builder().build(),
future.get(), actorContext.getSchemaContext()));
try {
proxyFuture.set(NormalizedNodeAggregator.aggregate(YangInstanceIdentifier.builder().build(),
future.get(), actorContext.getSchemaContext()));
- } catch (InterruptedException | ExecutionException e) {
+ } catch (DataValidationFailedException | InterruptedException | ExecutionException e) {
proxyFuture.setException(e);
}
}
proxyFuture.setException(e);
}
}
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
package org.opendaylight.controller.cluster.datastore.utils;
import com.google.common.base.Optional;
package org.opendaylight.controller.cluster.datastore.utils;
import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.MoreExecutors;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.dom.store.impl.InMemoryDOMDataStore;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreReadTransaction;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreThreePhaseCommitCohort;
-import org.opendaylight.controller.sal.core.spi.data.DOMStoreWriteTransaction;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
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.DataTree;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeCandidate;
+import org.opendaylight.yangtools.yang.data.api.schema.tree.DataTreeModification;
+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;
public class NormalizedNodeAggregator {
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
public class NormalizedNodeAggregator {
-
- private static final ExecutorService executorService = MoreExecutors.newDirectExecutorService();
-
private final YangInstanceIdentifier rootIdentifier;
private final List<Optional<NormalizedNode<?, ?>>> nodes;
private final YangInstanceIdentifier rootIdentifier;
private final List<Optional<NormalizedNode<?, ?>>> nodes;
- private final InMemoryDOMDataStore dataStore;
-
- NormalizedNodeAggregator(YangInstanceIdentifier rootIdentifier, List<Optional<NormalizedNode<?, ?>>> nodes,
- SchemaContext schemaContext){
+ private final DataTree dataTree;
+ private NormalizedNodeAggregator(YangInstanceIdentifier rootIdentifier, List<Optional<NormalizedNode<?, ?>>> nodes,
+ SchemaContext schemaContext) {
this.rootIdentifier = rootIdentifier;
this.nodes = nodes;
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);
* @param nodes
* @param schemaContext
* @return
* @param nodes
* @param schemaContext
* @return
- * @throws ExecutionException
- * @throws InterruptedException
+ * @throws DataValidationFailedException
*/
public static Optional<NormalizedNode<?,?>> aggregate(YangInstanceIdentifier rootIdentifier,
List<Optional<NormalizedNode<?, ?>>> nodes,
*/
public static Optional<NormalizedNode<?,?>> aggregate(YangInstanceIdentifier rootIdentifier,
List<Optional<NormalizedNode<?, ?>>> nodes,
- SchemaContext schemaContext)
- throws ExecutionException, InterruptedException {
+ SchemaContext schemaContext) throws DataValidationFailedException {
return new NormalizedNodeAggregator(rootIdentifier, nodes, schemaContext).aggregate();
}
return new NormalizedNodeAggregator(rootIdentifier, nodes, schemaContext).aggregate();
}
- private Optional<NormalizedNode<?,?>> aggregate() throws ExecutionException, InterruptedException {
+ private Optional<NormalizedNode<?,?>> aggregate() throws DataValidationFailedException {
return combine().getRootNode();
}
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<NormalizedNode<?,?>> node : nodes) {
- if(node.isPresent()) {
- domStoreWriteTransaction.merge(rootIdentifier, node.get());
+ for (Optional<NormalizedNode<?,?>> 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);
- private Optional<NormalizedNode<?, ?>> getRootNode() throws InterruptedException, ExecutionException {
- DOMStoreReadTransaction readTransaction = dataStore.newReadOnlyTransaction();
-
- CheckedFuture<Optional<NormalizedNode<?, ?>>, ReadFailedException> read =
- readTransaction.read(rootIdentifier);
-
- return read.get();
+ private Optional<NormalizedNode<?, ?>> getRootNode() {
+ return dataTree.takeSnapshot().readNode(rootIdentifier);
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.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
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);
SchemaContext schemaContext = SchemaContextHelper.full();
NormalizedNode<?, ?> expectedNode1 = ImmutableNodes.containerNode(TestModel.TEST_QNAME);
NormalizedNode<?, ?> expectedNode2 = ImmutableNodes.containerNode(CarsModel.CARS_QNAME);