From df56fc1a835e093f7d79c9e4eeb89aa293f91ee1 Mon Sep 17 00:00:00 2001 From: Lukas Sedlak Date: Sun, 9 Feb 2014 23:15:51 -0800 Subject: [PATCH] Bug fixes for netconf southbound plugin. Fixed wrong operation type sending in edit-config for netconf device. Action type replaced for "operation" type. Fixed conversion of toRpcMessage in NetconfMapping. Fixed wrong QName - changed from "action" to "operation". Change-Id: Ic9e07dfc2bdb50552321754cb92333ef88aa14bb Signed-off-by: Lukas Sedlak --- .../binding/impl/NotificationBrokerImpl.xtend | 15 +++++----- ...etconfDeviceTwoPhaseCommitTransaction.java | 14 ++++----- .../sal/connect/netconf/NetconfMapping.xtend | 29 ++++++++++++------- 3 files changed, 34 insertions(+), 24 deletions(-) diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend index a7dcf80e8d..9a431fec74 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/NotificationBrokerImpl.xtend @@ -23,10 +23,11 @@ import org.opendaylight.yangtools.yang.binding.Notification import org.slf4j.LoggerFactory import org.opendaylight.controller.sal.binding.codegen.impl.SingletonHolder import com.google.common.collect.Multimaps import org.opendaylight.yangtools.concepts.util.ListenerRegistry -import org.opendaylight.controller.sal.binding.api.NotificationProviderService.NotificationInterestListener import java.util.Set -import com.google.common.collect.ImmutableSet -import java.util.concurrent.Future - +import org.opendaylight.controller.sal.binding.api.NotificationProviderService.NotificationInterestListener import java.util.Set +import java.util.Set +import com.google.common.collect.ImmutableSet +import java.util.concurrent.Future + class NotificationBrokerImpl implements NotificationProviderService, AutoCloseable { val ListenerRegistry interestListeners = ListenerRegistry.create; @@ -105,14 +106,14 @@ class NotificationBrokerImpl implements NotificationProviderService, AutoCloseab submitAll(executor,tasks); } - def submitAll(ExecutorService service, Set tasks) { + def submitAll(ExecutorService service, Set tasks) { val ret = ImmutableSet.>builder(); for(task : tasks) { ret.add(service.submit(task)); } - return ret.build(); + return ret.build(); } - + override registerNotificationListener(Class notificationType, NotificationListener listener) { val reg = new GenericNotificationRegistration(notificationType, listener, this); diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java index c16ee170de..83700c892b 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfDeviceTwoPhaseCommitTransaction.java @@ -7,7 +7,7 @@ */ package org.opendaylight.controller.sal.connect.netconf; -import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_ACTION_QNAME; +import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_OPERATION_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_CANDIDATE_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_COMMIT_QNAME; import static org.opendaylight.controller.sal.connect.netconf.NetconfMapping.NETCONF_CONFIG_QNAME; @@ -52,7 +52,7 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac public void prepare() { for (InstanceIdentifier toRemove : modification.getRemovedConfigurationData()) { - sendRemove(toRemove); + sendDelete(toRemove); } for(Entry toUpdate : modification.getUpdatedConfigurationData().entrySet()) { sendMerge(toUpdate.getKey(),toUpdate.getValue()); @@ -64,8 +64,8 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac sendEditRpc(createEditStructure(key, Optional.absent(), Optional.of(value))); } - private void sendRemove(InstanceIdentifier toRemove) { - sendEditRpc(createEditStructure(toRemove, Optional.of("remove"), Optional. absent())); + private void sendDelete(InstanceIdentifier toDelete) { + sendEditRpc(createEditStructure(toDelete, Optional.of("delete"), Optional. absent())); } private void sendEditRpc(CompositeNode editStructure) { @@ -92,7 +92,7 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac return ret; } - private CompositeNode createEditStructure(InstanceIdentifier dataPath, Optional action, + private CompositeNode createEditStructure(InstanceIdentifier dataPath, Optional operation, Optional lastChildOverride) { List path = dataPath.getPath(); List reversed = Lists.reverse(path); @@ -110,8 +110,8 @@ public class NetconfDeviceTwoPhaseCommitTransaction implements DataCommitTransac } if (isLast) { - if (action.isPresent()) { - builder.setAttribute(NETCONF_ACTION_QNAME, action.get()); + if (operation.isPresent()) { + builder.setAttribute(NETCONF_OPERATION_QNAME, operation.get()); } if (lastChildOverride.isPresent()) { List> children = lastChildOverride.get().getChildren(); diff --git a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfMapping.xtend b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfMapping.xtend index 53ed49cd2a..f409ecdade 100644 --- a/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfMapping.xtend +++ b/opendaylight/md-sal/sal-netconf-connector/src/main/java/org/opendaylight/controller/sal/connect/netconf/NetconfMapping.xtend @@ -16,24 +16,30 @@ import java.util.Collections import java.util.List import java.util.Set import java.util.concurrent.atomic.AtomicInteger -import org.opendaylight.controller.netconf.api.NetconfMessage import org.opendaylight.controller.sal.common.util.Rpcs -import org.opendaylight.yangtools.yang.common.QName -import org.opendaylight.yangtools.yang.common.RpcResult import org.opendaylight.yangtools.yang.data.api.CompositeNode import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument -import org.opendaylight.yangtools.yang.data.api.Node import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl import org.opendaylight.yangtools.yang.data.impl.ImmutableCompositeNode -import org.opendaylight.yangtools.yang.data.impl.NodeUtils -import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl +import java.util.Collections +import java.util.List +import java.util.Set +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.NodeIdentifierWithPredicates +import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier.PathArgument +import org.opendaylight.yangtools.yang.data.api.Node +import org.opendaylight.yangtools.yang.data.impl.CompositeNodeTOImpl import org.opendaylight.yangtools.yang.data.impl.codec.xml.XmlDocumentUtils import org.opendaylight.yangtools.yang.model.api.NotificationDefinition import org.opendaylight.yangtools.yang.model.api.SchemaContext import org.w3c.dom.Document import org.w3c.dom.Element +import org.opendaylight.yangtools.yang.common.QName +import org.opendaylight.yangtools.yang.data.impl.SimpleNodeTOImpl +import org.opendaylight.controller.netconf.api.NetconfMessage +import org.opendaylight.yangtools.yang.common.RpcResult class NetconfMapping { @@ -50,7 +56,7 @@ class NetconfMapping { public static val NETCONF_GET_CONFIG_QNAME = QName.create(NETCONF_QNAME, "get-config"); public static val NETCONF_EDIT_CONFIG_QNAME = QName.create(NETCONF_QNAME, "edit-config"); public static val NETCONF_DELETE_CONFIG_QNAME = QName.create(NETCONF_QNAME, "delete-config"); - public static val NETCONF_ACTION_QNAME = QName.create(NETCONF_QNAME, "action"); + public static val NETCONF_OPERATION_QNAME = QName.create(NETCONF_QNAME, "operation"); public static val NETCONF_COMMIT_QNAME = QName.create(NETCONF_QNAME, "commit"); public static val NETCONF_CONFIG_QNAME = QName.create(NETCONF_QNAME, "config"); @@ -92,6 +98,9 @@ class NetconfMapping { for (arg : argument.keyValues.entrySet) { list.add = new SimpleNodeTOImpl(arg.key, null, arg.value); } + if (node != null) { + list.add(node); + } return new CompositeNodeTOImpl(argument.nodeType, null, list) } @@ -120,9 +129,9 @@ class NetconfMapping { } static def NetconfMessage toRpcMessage(QName rpc, CompositeNode node,Optional ctx) { - val rpcPayload = wrap(NETCONF_RPC_QNAME, flattenInput(node)); - val w3cPayload = NodeUtils.buildShadowDomTree(rpcPayload); - w3cPayload.documentElement.setAttribute("message-id", "m-" + messageId.andIncrement); + val rpcPayload = wrap(NETCONF_RPC_QNAME, flattenInput(node)) + val w3cPayload = XmlDocumentUtils.toDocument(rpcPayload, XmlDocumentUtils.defaultValueCodecProvider) + w3cPayload.documentElement.setAttribute("message-id", "m-" + messageId.andIncrement) return new NetconfMessage(w3cPayload); } -- 2.36.6