From 026f5db7c93f7317f4e0c6c22c93be502364fcf7 Mon Sep 17 00:00:00 2001 From: Maros Marsalek Date: Tue, 10 Mar 2015 17:14:08 +0100 Subject: [PATCH] Bug 2412: Expose Mountpoints on proper path Lists such as topology, node were not doubled in the YANG Instance Identifier used as a key for mountpoints, which prevented Binding compontents from accessing them. This patch fixes also bug in restconf, which was also producing incorrect instance identifiers. Change-Id: I3122163d00d4c23fcccc4bbffdf3d0113744c98d Signed-off-by: Maros Marsalek --- .../BindingDOMMountPointListenerAdapter.java | 18 ++++++++++++++---- .../sal/connect/util/RemoteDeviceId.java | 2 ++ .../sal/restconf/impl/ControllerContext.java | 9 ++------- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMMountPointListenerAdapter.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMMountPointListenerAdapter.java index 5698156934..f33148271f 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMMountPointListenerAdapter.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDOMMountPointListenerAdapter.java @@ -7,6 +7,7 @@ */ package org.opendaylight.controller.md.sal.binding.impl; +import com.google.common.base.Optional; import org.opendaylight.controller.md.sal.binding.api.MountPointService.MountPointListener; import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService; import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener; @@ -41,21 +42,30 @@ final class BindingDOMMountPointListenerAdapter im @Override public void onMountPointCreated(final YangInstanceIdentifier path) { try { - final InstanceIdentifier bindingPath = codec.toBinding(path).get(); + final InstanceIdentifier bindingPath = toBinding(path); listener.onMountPointCreated(bindingPath); } catch (final DeserializationException e) { - BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}. Ommiting event.",path,e); + BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}. Omitting event.",path,e); } } + private InstanceIdentifier toBinding(final YangInstanceIdentifier path) throws DeserializationException { + final Optional> instanceIdentifierOptional = codec.toBinding(path); + if(instanceIdentifierOptional.isPresent()) { + return instanceIdentifierOptional.get(); + } else { + throw new DeserializationException("Deserialization unsuccessful, " + instanceIdentifierOptional); + } + } + @Override public void onMountPointRemoved(final YangInstanceIdentifier path) { try { - final InstanceIdentifier bindingPath = codec.toBinding(path).get(); + final InstanceIdentifier bindingPath = toBinding(path); listener.onMountPointRemoved(bindingPath); } catch (final DeserializationException e) { - BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}. Ommiting event.",path,e); + BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}. Omitting event.",path,e); } } } \ No newline at end of file diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/util/RemoteDeviceId.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/util/RemoteDeviceId.java index 7f13a7a5dd..a280da9228 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/util/RemoteDeviceId.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/util/RemoteDeviceId.java @@ -96,7 +96,9 @@ public final class RemoteDeviceId { org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier.builder(); builder .node(NetworkTopology.QNAME) + .node(Topology.QNAME) .nodeWithKey(Topology.QNAME, QName.create(Topology.QNAME, "topology-id"), TopologyNetconf.QNAME.getLocalName()) + .node(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME) .nodeWithKey(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME, QName.create(org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node.QNAME, "node-id"), name); return builder.build(); diff --git a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java index 7df760115c..c4d46a7551 100644 --- a/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java +++ b/opendaylight/md-sal/sal-rest-connector/src/main/java/org/opendaylight/controller/sal/restconf/impl/ControllerContext.java @@ -529,7 +529,7 @@ public class ControllerContext implements SchemaContextListener { ErrorType.APPLICATION, ErrorTag.OPERATION_NOT_SUPPORTED); } - final YangInstanceIdentifier partialPath = builder.toInstance(); + final YangInstanceIdentifier partialPath = dataNormalizer.toNormalized(builder.build()); final Optional mountOpt = mountService.getMountPoint(partialPath); if (!mountOpt.isPresent()) { LOG.debug("Instance identifier to missing mount point: {}", partialPath); @@ -544,12 +544,7 @@ public class ControllerContext implements SchemaContextListener { ErrorType.APPLICATION, ErrorTag.UNKNOWN_ELEMENT); } - if (returnJustMountPoint) { - final YangInstanceIdentifier instance = YangInstanceIdentifier.builder().toInstance(); - return new InstanceIdentifierContext(instance, mountPointSchema, mount,mountPointSchema); - } - - if (strings.size() == 1) { + if (returnJustMountPoint || strings.size() == 1) { final YangInstanceIdentifier instance = YangInstanceIdentifier.builder().toInstance(); return new InstanceIdentifierContext(instance, mountPointSchema, mount,mountPointSchema); } -- 2.36.6