From 33da69fa2c632e6229c5064d546c2f20ae9dd3f3 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 20 Aug 2019 16:37:51 +0200 Subject: [PATCH] Bump yangtools to 4.0.1 This bumps yangtools to 4.0.1 as part of Magnesium MRI. Change-Id: I1ac7d3f856af310f4e8015875223d30eac3a8276 Signed-off-by: Robert Varga --- .../mdsal/odl-controller-blueprint/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- features/mdsal/odl-mdsal-broker-local/pom.xml | 2 +- .../odl-mdsal-clustering-commons/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- .../odl-mdsal-distributed-datastore/pom.xml | 2 +- .../src/main/feature/feature.xml | 2 +- opendaylight/blueprint/pom.xml | 2 +- .../md-sal/sal-binding-dom-it/pom.xml | 2 +- .../stream/AbstractLithiumDataInput.java | 9 ++++--- .../stream/AbstractLithiumDataOutput.java | 12 ++++++---- .../stream/AbstractMagnesiumDataInput.java | 9 ++++--- .../stream/AbstractMagnesiumDataOutput.java | 8 +++++-- .../AbstractNormalizedNodeDataOutput.java | 7 ++++++ .../AbstractNormalizedNodePruner.java | 15 ++++++++++-- .../NormalizedNodeStreamReaderWriterTest.java | 8 +++---- .../utils/stream/SerializationUtilsTest.java | 4 ++-- .../transformer/NormalizedNodePrunerTest.java | 4 ++-- .../compat/DataNormalizationOperation.java | 10 ++++---- .../DatastoreContextIntrospector.java | 24 ++++++++++++++++--- .../cluster/datastore/ShardDataTree.java | 2 +- .../ShardRecoveryCoordinatorTest.java | 10 ++++---- 22 files changed, 96 insertions(+), 44 deletions(-) diff --git a/features/mdsal/odl-controller-blueprint/pom.xml b/features/mdsal/odl-controller-blueprint/pom.xml index ec5cecca1e..8172e9700b 100644 --- a/features/mdsal/odl-controller-blueprint/pom.xml +++ b/features/mdsal/odl-controller-blueprint/pom.xml @@ -33,7 +33,7 @@ org.opendaylight.yangtools yangtools-artifacts - 3.0.5 + 4.0.1 pom import diff --git a/features/mdsal/odl-controller-blueprint/src/main/feature/feature.xml b/features/mdsal/odl-controller-blueprint/src/main/feature/feature.xml index 636ef9f96e..78feb3ea46 100644 --- a/features/mdsal/odl-controller-blueprint/src/main/feature/feature.xml +++ b/features/mdsal/odl-controller-blueprint/src/main/feature/feature.xml @@ -8,7 +8,7 @@ --> - odl-yangtools-codec + odl-yangtools-codec mvn:org.opendaylight.controller/blueprint/${blueprint.version} diff --git a/features/mdsal/odl-mdsal-broker-local/pom.xml b/features/mdsal/odl-mdsal-broker-local/pom.xml index 3373a7e279..7dafb4d2eb 100644 --- a/features/mdsal/odl-mdsal-broker-local/pom.xml +++ b/features/mdsal/odl-mdsal-broker-local/pom.xml @@ -37,7 +37,7 @@ org.opendaylight.yangtools yangtools-artifacts - 3.0.5 + 4.0.1 pom import diff --git a/features/mdsal/odl-mdsal-clustering-commons/pom.xml b/features/mdsal/odl-mdsal-clustering-commons/pom.xml index 0eeadc096d..543d237c87 100644 --- a/features/mdsal/odl-mdsal-clustering-commons/pom.xml +++ b/features/mdsal/odl-mdsal-clustering-commons/pom.xml @@ -29,7 +29,7 @@ org.opendaylight.yangtools yangtools-artifacts - 3.0.5 + 4.0.1 pom import diff --git a/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml b/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml index 907bd59aa0..bf6fbbeca2 100644 --- a/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml +++ b/features/mdsal/odl-mdsal-clustering-commons/src/main/feature/feature.xml @@ -14,6 +14,6 @@ odl-apache-commons-lang3 odl-dropwizard-metrics odl-servlet-api - odl-yangtools-data + odl-yangtools-data diff --git a/features/mdsal/odl-mdsal-distributed-datastore/pom.xml b/features/mdsal/odl-mdsal-distributed-datastore/pom.xml index 1501438ef0..d07dd9da0a 100644 --- a/features/mdsal/odl-mdsal-distributed-datastore/pom.xml +++ b/features/mdsal/odl-mdsal-distributed-datastore/pom.xml @@ -29,7 +29,7 @@ org.opendaylight.yangtools yangtools-artifacts - 3.0.5 + 4.0.1 pom import diff --git a/features/mdsal/odl-mdsal-distributed-datastore/src/main/feature/feature.xml b/features/mdsal/odl-mdsal-distributed-datastore/src/main/feature/feature.xml index bf2fb94a4f..089d7683b8 100644 --- a/features/mdsal/odl-mdsal-distributed-datastore/src/main/feature/feature.xml +++ b/features/mdsal/odl-mdsal-distributed-datastore/src/main/feature/feature.xml @@ -9,7 +9,7 @@ odl-apache-commons-text - odl-yangtools-codec + odl-yangtools-codec odl-mdsal-eos-dom odl-mdsal-dom-broker odl-mdsal-binding-dom-adapter diff --git a/opendaylight/blueprint/pom.xml b/opendaylight/blueprint/pom.xml index 81071f210d..e672ef168b 100644 --- a/opendaylight/blueprint/pom.xml +++ b/opendaylight/blueprint/pom.xml @@ -41,7 +41,7 @@ org.opendaylight.yangtools yangtools-artifacts - 3.0.5 + 4.0.1 pom import diff --git a/opendaylight/md-sal/sal-binding-dom-it/pom.xml b/opendaylight/md-sal/sal-binding-dom-it/pom.xml index b1cdac6f2e..21cf3df976 100644 --- a/opendaylight/md-sal/sal-binding-dom-it/pom.xml +++ b/opendaylight/md-sal/sal-binding-dom-it/pom.xml @@ -18,7 +18,7 @@ org.opendaylight.yangtools yangtools-artifacts - 3.0.5 + 4.0.1 pom import diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataInput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataInput.java index 3ef0defdc8..d921076f71 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataInput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataInput.java @@ -114,9 +114,12 @@ abstract class AbstractLithiumDataInput extends AbstractNormalizedNodeDataInput private void streamAnyxml(final NormalizedNodeStreamWriter writer) throws IOException { final NodeIdentifier identifier = readNodeIdentifier(); LOG.trace("Streaming anyxml node {}", identifier); - writer.startAnyxmlNode(identifier); - writer.domSourceValue(readDOMSource()); - writer.endNode(); + + final DOMSource value = readDOMSource(); + if (writer.startAnyxmlNode(identifier, DOMSource.class)) { + writer.domSourceValue(value); + writer.endNode(); + } } private void streamAugmentation(final NormalizedNodeStreamWriter writer) throws IOException { diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataOutput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataOutput.java index 95c62fc4c7..25e14b13eb 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataOutput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractLithiumDataOutput.java @@ -179,10 +179,14 @@ abstract class AbstractLithiumDataOutput extends AbstractNormalizedNodeDataOutpu } @Override - public final void startAnyxmlNode(final NodeIdentifier name) throws IOException { - LOG.trace("Starting any xml node"); - startNode(name, LithiumNode.ANY_XML_NODE); - inSimple = true; + public final boolean startAnyxmlNode(final NodeIdentifier name, final Class objectModel) throws IOException { + if (DOMSource.class.isAssignableFrom(objectModel)) { + LOG.trace("Starting anyxml node"); + startNode(name, LithiumNode.ANY_XML_NODE); + inSimple = true; + return true; + } + return false; } @Override diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataInput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataInput.java index 1ea8917d4a..d8302e5bcd 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataInput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataInput.java @@ -137,9 +137,12 @@ abstract class AbstractMagnesiumDataInput extends AbstractNormalizedNodeDataInpu private void streamAnyxml(final NormalizedNodeStreamWriter writer, final byte nodeHeader) throws IOException { final NodeIdentifier identifier = decodeNodeIdentifier(nodeHeader); LOG.trace("Streaming anyxml node {}", identifier); - writer.startAnyxmlNode(identifier); - writer.domSourceValue(readDOMSource()); - writer.endNode(); + + final DOMSource value = readDOMSource(); + if (writer.startAnyxmlNode(identifier, DOMSource.class)) { + writer.domSourceValue(value); + writer.endNode(); + } } private void streamAnyxmlModeled(final NormalizedNodeStreamWriter writer, final byte nodeHeader) diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataOutput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataOutput.java index c0dfb1bc5f..3f28f0672d 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataOutput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractMagnesiumDataOutput.java @@ -180,8 +180,12 @@ abstract class AbstractMagnesiumDataOutput extends AbstractNormalizedNodeDataOut } @Override - public final void startAnyxmlNode(final NodeIdentifier name) throws IOException { - startSimpleNode(MagnesiumNode.NODE_ANYXML, name); + public final boolean startAnyxmlNode(final NodeIdentifier name, final Class objectModel) throws IOException { + if (DOMSource.class.isAssignableFrom(objectModel)) { + startSimpleNode(MagnesiumNode.NODE_ANYXML, name); + return true; + } + return false; } @Override diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractNormalizedNodeDataOutput.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractNormalizedNodeDataOutput.java index 7907fcfc9f..d8e021fc60 100755 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractNormalizedNodeDataOutput.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/AbstractNormalizedNodeDataOutput.java @@ -16,6 +16,7 @@ import java.util.List; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter; @@ -186,6 +187,12 @@ abstract class AbstractNormalizedNodeDataOutput implements NormalizedNodeDataOut } } + @Override + public final boolean startAnydataNode(final NodeIdentifier name, final Class objectModel) throws IOException { + // FIXME: We do not support anydata nodes of any kind, yet + return false; + } + abstract short streamVersion(); abstract void writeQNameInternal(@NonNull QName qname) throws IOException; diff --git a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java index c3628ad1e8..d6d409cead 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/main/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/AbstractNormalizedNodePruner.java @@ -8,6 +8,7 @@ package org.opendaylight.controller.cluster.datastore.node.utils.transformer; import static com.google.common.base.Preconditions.checkState; +import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; import java.io.IOException; @@ -158,8 +159,18 @@ abstract class AbstractNormalizedNodePruner implements NormalizedNodeStreamWrite } @Override - public void startAnyxmlNode(final NodeIdentifier name) throws IOException { - enter(ReusableImmutableNormalizedNodeStreamWriter::startAnyxmlNode, name); + public boolean startAnyxmlNode(final NodeIdentifier name, final Class objectModel) throws IOException { + if (enter(name)) { + verify(delegate.startAnyxmlNode(name, objectModel), + "Unexpected failure to stream DOMSource node %s model %s", name, objectModel); + } + return true; + } + + @Override + public boolean startAnydataNode(final NodeIdentifier name, final Class objectModel) throws IOException { + // FIXME: we do not support anydata nodes yet + return false; } @Override diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java index 4b45af48e9..1e57eb4b7e 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/NormalizedNodeStreamReaderWriterTest.java @@ -5,7 +5,6 @@ * 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.node.utils.stream; import static org.junit.Assert.assertEquals; @@ -33,8 +32,8 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdent import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifierWithPredicates; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.PathArgument; -import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; +import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.DataContainerChild; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; @@ -220,10 +219,11 @@ public class NormalizedNodeStreamReaderWriterTest { StreamResult xmlOutput = new StreamResult(new StringWriter()); Transformer transformer = TransformerFactory.newInstance().newTransformer(); transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); - transformer.transform(((AnyXmlNode)child.get()).getValue(), xmlOutput); + transformer.transform(((DOMSourceAnyxmlNode)child.get()).getValue(), xmlOutput); assertEquals("XML", xml, xmlOutput.getWriter().toString()); - assertEquals("http://www.w3.org/TR/html4/", ((AnyXmlNode)child.get()).getValue().getNode().getNamespaceURI()); + assertEquals("http://www.w3.org/TR/html4/", + ((DOMSourceAnyxmlNode)child.get()).getValue().getNode().getNamespaceURI()); } @Test diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java index 610a2328f3..04da2a6956 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/stream/SerializationUtilsTest.java @@ -30,9 +30,9 @@ import org.opendaylight.yangtools.util.xml.UntrustedXML; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; -import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; import org.opendaylight.yangtools.yang.data.api.schema.AugmentationNode; import org.opendaylight.yangtools.yang.data.api.schema.ChoiceNode; +import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetNode; @@ -63,7 +63,7 @@ public class SerializationUtilsTest { final ByteArrayInputStream is = new ByteArrayInputStream("".getBytes(Charset.defaultCharset())); final Document parse = UntrustedXML.newDocumentBuilder().parse(is); - final AnyXmlNode anyXmlNode = Builders.anyXmlBuilder() + final DOMSourceAnyxmlNode anyXmlNode = Builders.anyXmlBuilder() .withNodeIdentifier(id("anyXmlNode")) .withValue(new DOMSource(parse)) .build(); diff --git a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java index f15b184513..50ade7875f 100644 --- a/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java +++ b/opendaylight/md-sal/sal-clustering-commons/src/test/java/org/opendaylight/controller/cluster/datastore/node/utils/transformer/NormalizedNodePrunerTest.java @@ -30,7 +30,7 @@ import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.AugmentationIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeWithValue; -import org.opendaylight.yangtools.yang.data.api.schema.AnyXmlNode; +import org.opendaylight.yangtools.yang.data.api.schema.DOMSourceAnyxmlNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafNode; import org.opendaylight.yangtools.yang.data.api.schema.LeafSetEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.MapNode; @@ -257,7 +257,7 @@ public class NormalizedNodePrunerTest { @Test public void testAnyXMLNodeNotPrunedWhenHasParent() throws IOException { NormalizedNodePruner pruner = prunerFullSchema(TestModel.TEST_PATH); - AnyXmlNode child = Builders.anyXmlBuilder().withNodeIdentifier( + DOMSourceAnyxmlNode child = Builders.anyXmlBuilder().withNodeIdentifier( new NodeIdentifier(TestModel.ANY_XML_QNAME)).withValue(mock(DOMSource.class)).build(); NormalizedNode input = Builders.containerBuilder().withNodeIdentifier( new NodeIdentifier(TestModel.TEST_QNAME)).withChild(child).build(); diff --git a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java index 4dbd7db03e..7a2388231c 100644 --- a/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java +++ b/opendaylight/md-sal/sal-common-impl/src/main/java/org/opendaylight/controller/md/sal/common/impl/util/compat/DataNormalizationOperation.java @@ -32,7 +32,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.MapEntryNode; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; import org.opendaylight.yangtools.yang.data.impl.schema.Builders; import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder; -import org.opendaylight.yangtools.yang.model.api.AnyXmlSchemaNode; +import org.opendaylight.yangtools.yang.model.api.AnyxmlSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationSchemaNode; import org.opendaylight.yangtools.yang.model.api.AugmentationTarget; import org.opendaylight.yangtools.yang.model.api.CaseSchemaNode; @@ -483,8 +483,8 @@ public abstract class DataNormalizationOperation impleme } } - private static class AnyXmlNormalization extends DataNormalizationOperation { - AnyXmlNormalization(final AnyXmlSchemaNode schema) { + private static class AnyxmlNormalization extends DataNormalizationOperation { + AnyxmlNormalization(final AnyxmlSchemaNode schema) { super(new NodeIdentifier(schema.getQName()), schema); } @@ -574,8 +574,8 @@ public abstract class DataNormalizationOperation impleme return new ChoiceNodeNormalization((ChoiceSchemaNode) potential); } else if (potential instanceof LeafListSchemaNode) { return fromLeafListSchemaNode((LeafListSchemaNode) potential); - } else if (potential instanceof AnyXmlSchemaNode) { - return new AnyXmlNormalization((AnyXmlSchemaNode) potential); + } else if (potential instanceof AnyxmlSchemaNode) { + return new AnyxmlNormalization((AnyxmlSchemaNode) potential); } return null; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java index 93aee0d245..f22a98a3cc 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/DatastoreContextIntrospector.java @@ -29,6 +29,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.function.Function; import org.apache.commons.lang3.StringUtils; import org.apache.commons.text.WordUtils; import org.checkerframework.checker.lock.qual.GuardedBy; @@ -39,6 +40,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controll import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.distributed.datastore.provider.rev140612.DataStorePropertiesContainer; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.QName; +import org.opendaylight.yangtools.yang.common.Uint16; +import org.opendaylight.yangtools.yang.common.Uint32; +import org.opendaylight.yangtools.yang.common.Uint64; +import org.opendaylight.yangtools.yang.common.Uint8; import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -59,6 +64,14 @@ public class DatastoreContextIntrospector { private static final Map BUILDER_SETTERS = new HashMap<>(); + private static final ImmutableMap, Function> UINT_FACTORIES = + ImmutableMap., Function>builder() + .put(Uint8.class, Uint8::valueOf) + .put(Uint16.class, Uint16::valueOf) + .put(Uint32.class, Uint32::valueOf) + .put(Uint64.class, Uint64::valueOf) + .build(); + static { try { introspectDatastoreContextBuilder(); @@ -393,13 +406,18 @@ public class DatastoreContextIntrospector { } final Constructor ctor = CONSTRUCTORS.get(toType); - - LOG.trace("Found {}", ctor); - if (ctor == null) { + if (fromValue instanceof String) { + final Function factory = UINT_FACTORIES.get(toType); + if (factory != null) { + return factory.apply((String) fromValue); + } + } + throw new IllegalArgumentException(String.format("Constructor not found for type %s", toType)); } + LOG.trace("Found {}", ctor); Object value = fromValue; // Once we find a constructor that takes the original type as an argument, we're done recursing. diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java index 614a346068..43a3f6dc49 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/main/java/org/opendaylight/controller/cluster/datastore/ShardDataTree.java @@ -945,7 +945,7 @@ public class ShardDataTree extends ShardDataTreeTransactionParent { try { candidate = tip.prepare(cohort.getDataTreeModification()); LOG.debug("{}: Transaction {} candidate ready", logContext, currentId); - } catch (RuntimeException e) { + } catch (DataValidationFailedException | RuntimeException e) { failPreCommit(e); return; } diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java index 0b78e3244d..4ad48a1d83 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardRecoveryCoordinatorTest.java @@ -29,6 +29,7 @@ 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.api.schema.tree.TreeType; import org.opendaylight.yangtools.yang.data.impl.schema.tree.InMemoryDataTreeFactory; import org.opendaylight.yangtools.yang.data.impl.schema.tree.SchemaValidationFailedException; @@ -57,7 +58,8 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } @Test - public void testAppendRecoveredLogEntryCommitTransactionPayload() throws IOException { + public void testAppendRecoveredLogEntryCommitTransactionPayload() throws IOException, + DataValidationFailedException { try { coordinator.appendRecoveredLogEntry(CommitTransactionPayload.create(nextTransactionId(), createCar())); } catch (final SchemaValidationFailedException e) { @@ -68,7 +70,7 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } @Test - public void testApplyRecoverySnapshot() { + public void testApplyRecoverySnapshot() throws DataValidationFailedException { coordinator.applyRecoverySnapshot(createSnapshot()); assertFalse(readCars(peopleDataTree).isPresent()); @@ -85,7 +87,7 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { } } - private DataTreeCandidate createCar() { + private DataTreeCandidate createCar() throws DataValidationFailedException { final DataTree dataTree = new InMemoryDataTreeFactory().create( DataTreeConfiguration.DEFAULT_OPERATIONAL, carsSchemaContext); @@ -114,7 +116,7 @@ public class ShardRecoveryCoordinatorTest extends AbstractTest { return shardDataTree.readNode(PeopleModel.BASE_PATH); } - private static ShardSnapshotState createSnapshot() { + private static ShardSnapshotState createSnapshot() throws DataValidationFailedException { final DataTree dataTree = new InMemoryDataTreeFactory().create( DataTreeConfiguration.DEFAULT_OPERATIONAL, SchemaContextHelper.select(SchemaContextHelper.CARS_YANG, SchemaContextHelper.PEOPLE_YANG)); -- 2.36.6