From: Robert Varga Date: Mon, 26 Feb 2024 13:57:20 +0000 (+0100) Subject: Improve monitoring access to revision-less schemas X-Git-Tag: v7.0.0~5 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=3c7fc15ebf4ce986ae30f7a19d51e9aa22ccfc94;p=netconf.git Improve monitoring access to revision-less schemas The server may support multiple versions of YANG schema, which one of which may not actually have a revision. In this case we really want to specify an empty version, as that is the entry are after -- rather than any version, which would incur data-not-unique error. JIRA: NETCONF-840 Change-Id: I5b705971369cbffa81c0c0464569f8caac2f8e6d Signed-off-by: Robert Varga --- diff --git a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/MonitoringSchemaSourceProvider.java b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/MonitoringSchemaSourceProvider.java index a6e42046f9..391ada9877 100644 --- a/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/MonitoringSchemaSourceProvider.java +++ b/plugins/netconf-client-mdsal/src/main/java/org/opendaylight/netconf/client/mdsal/impl/MonitoringSchemaSourceProvider.java @@ -14,8 +14,8 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.MoreExecutors; import java.util.Optional; -import javax.xml.transform.dom.DOMSource; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.netconf.client.mdsal.api.NetconfRpcService; import org.opendaylight.netconf.client.mdsal.api.RemoteDeviceId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.monitoring.rev101004.GetSchema; @@ -26,7 +26,6 @@ import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.NodeIdentifier; 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.LeafNode; import org.opendaylight.yangtools.yang.data.spi.node.ImmutableNodes; import org.opendaylight.yangtools.yang.model.api.source.SourceIdentifier; @@ -64,10 +63,9 @@ final class MonitoringSchemaSourceProvider implements SchemaSourceProvider getSource(final SourceIdentifier sourceIdentifier) { - final String moduleName = sourceIdentifier.name().getLocalName(); - final Revision revision = sourceIdentifier.revision(); - final ContainerNode getSchemaRequest = createGetSchemaRequest(moduleName, - revision == null ? Optional.empty() : Optional.of(revision.toString())); + final var moduleName = sourceIdentifier.name().getLocalName(); + final var revision = sourceIdentifier.revision(); + final var getSchemaRequest = createGetSchemaRequest(moduleName, revision); LOG.trace("{}: Loading YANG schema source for {}:{}", id, moduleName, revision); return Futures.transform(rpc.invokeNetconf(GetSchema.QNAME, getSchemaRequest), @@ -90,13 +88,13 @@ final class MonitoringSchemaSourceProvider implements SchemaSourceProvider revision) { - final var builder = ImmutableNodes.newContainerBuilder() + static @NonNull ContainerNode createGetSchemaRequest(final String moduleName, final @Nullable Revision revision) { + return ImmutableNodes.newContainerBuilder() .withNodeIdentifier(GET_SCHEMA_PATHARG) .withChild(ImmutableNodes.leafNode(IDENTIFIER_PATHARG, moduleName)) - .withChild(FORMAT_LEAF); - revision.ifPresent(rev -> builder.withChild(ImmutableNodes.leafNode(VERSION_PATHARG, rev))); - return builder.build(); + .withChild(ImmutableNodes.leafNode(VERSION_PATHARG, revision == null ? "" : revision.toString())) + .withChild(FORMAT_LEAF) + .build(); } private static Optional getSchemaFromRpc(final RemoteDeviceId id, final ContainerNode result) { @@ -104,13 +102,13 @@ final class MonitoringSchemaSourceProvider implements SchemaSourceProvider @@ -320,8 +321,8 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { assertTrue(compositeNodeRpcResult.errors().isEmpty()); assertNotNull(compositeNodeRpcResult.value()); - final var values = MonitoringSchemaSourceProvider.createGetSchemaRequest( - "module", Optional.of("2012-12-12")).body(); + final var values = MonitoringSchemaSourceProvider.createGetSchemaRequest("module", Revision.of("2012-12-12")) + .body(); final var keys = new HashMap(); for (var value : values) { @@ -405,8 +406,8 @@ public class NetconfMessageTransformerTest extends AbstractBaseSchemasTest { @Test public void testEditConfigRequest() throws Exception { - final var values = MonitoringSchemaSourceProvider.createGetSchemaRequest( - "module", Optional.of("2012-12-12")).body(); + final var values = MonitoringSchemaSourceProvider.createGetSchemaRequest("module", Revision.of("2012-12-12")) + .body(); final var keys = new HashMap(); for (var value : values) {