<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 19:55:41 UTC 2024

It is possible to restrict the fields that are returned in this document by specifying the 'field' parameter in your request.
For example, to request only the issue key and summary append 'field=key&field=summary' to the URL of your request.
-->
<rss version="0.92" >
<channel>
    <title>OpenDaylight JIRA</title>
    <link>https://jira.opendaylight.org</link>
    <description>This file is an XML representation of an issue</description>
    <language>en-us</language>    <build-info>
        <version>8.20.10</version>
        <build-number>820010</build-number>
        <build-date>22-06-2022</build-date>
    </build-info>


<item>
            <title>[CONTROLLER-1494] Fails to inject config module with no list dependency entry</title>
                <link>https://jira.opendaylight.org/browse/CONTROLLER-1494</link>
                <project id="10113" key="CONTROLLER">controller</project>
                    <description>&lt;p&gt;Steps to reproduce:&lt;br/&gt;
1. Run ODL Karaf distribution (Boron)&lt;br/&gt;
2. Install features odl-bgpcep-bgp-all odl-restconf odl-netconf-connector-all&lt;br/&gt;
3. Via RESTCONF add BGP peer config module as per &lt;a href=&quot;https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer_2&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer_2&lt;/a&gt;&lt;br/&gt;
4. Observe the exception in response and ODL logs:&lt;/p&gt;

&lt;p&gt;2016-03-01 11:00:24,011 | ERROR | entLoopGroup-6-2 | NetconfOperationRouterImpl       | 285 - org.opendaylight.netconf.impl - 1.1.0.SNAPSHOT | Unexpected exception during netconf operation execution&lt;br/&gt;
java.lang.IllegalStateException: Unable to set attributes for org.opendaylight.controller:instanceName=example-bgp-peer,TransactionName=ConfigTransaction-105-113,type=Module,moduleFactoryName=bgp-peer, Error with attribute add-path:AttributeConfigElement &lt;span class=&quot;error&quot;&gt;&amp;#91;defaultValue=null, value=null&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.strategy.ReplaceEditConfigStrategy.executeStrategy(ReplaceEditConfigStrategy.java:60)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.strategy.AbstractEditConfigStrategy.executeConfiguration(AbstractEditConfigStrategy.java:33)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacade.setOnTransaction(ConfigSubsystemFacade.java:238)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacade.test(ConfigSubsystemFacade.java:165)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacade.executeTests(ConfigSubsystemFacade.java:149)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.ConfigSubsystemFacade.executeConfigExecution(ConfigSubsystemFacade.java:123)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.confignetconfconnector.operations.editconfig.EditConfig.getResponseInternal(EditConfig.java:48)&lt;span class=&quot;error&quot;&gt;&amp;#91;287:org.opendaylight.netconf.config-netconf-connector:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.confignetconfconnector.operations.editconfig.EditConfig.handleWithNoSubsequentOperations(EditConfig.java:75)&lt;span class=&quot;error&quot;&gt;&amp;#91;287:org.opendaylight.netconf.config-netconf-connector:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.util.mapping.AbstractLastNetconfOperation.handle(AbstractLastNetconfOperation.java:33)&lt;span class=&quot;error&quot;&gt;&amp;#91;198:org.opendaylight.netconf.util:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.util.mapping.AbstractNetconfOperation.handle(AbstractNetconfOperation.java:101)&lt;span class=&quot;error&quot;&gt;&amp;#91;198:org.opendaylight.netconf.util:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.impl.osgi.NetconfOperationRouterImpl$NetconfOperationExecution.execute(NetconfOperationRouterImpl.java:182)&lt;span class=&quot;error&quot;&gt;&amp;#91;285:org.opendaylight.netconf.impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.impl.osgi.NetconfOperationRouterImpl.executeOperationWithHighestPriority(NetconfOperationRouterImpl.java:111)&lt;span class=&quot;error&quot;&gt;&amp;#91;285:org.opendaylight.netconf.impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.impl.osgi.NetconfOperationRouterImpl.onNetconfMessage(NetconfOperationRouterImpl.java:84)&lt;span class=&quot;error&quot;&gt;&amp;#91;285:org.opendaylight.netconf.impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.impl.NetconfServerSessionListener.processDocument(NetconfServerSessionListener.java:113)&lt;span class=&quot;error&quot;&gt;&amp;#91;285:org.opendaylight.netconf.impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.impl.NetconfServerSessionListener.onMessage(NetconfServerSessionListener.java:86)&lt;span class=&quot;error&quot;&gt;&amp;#91;285:org.opendaylight.netconf.impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.impl.NetconfServerSessionListener.onMessage(NetconfServerSessionListener.java:29)&lt;span class=&quot;error&quot;&gt;&amp;#91;285:org.opendaylight.netconf.impl:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:64)&lt;span class=&quot;error&quot;&gt;&amp;#91;199:org.opendaylight.netconf.netty-util:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.netconf.nettyutil.AbstractNetconfSession.handleMessage(AbstractNetconfSession.java:35)&lt;span class=&quot;error&quot;&gt;&amp;#91;199:org.opendaylight.netconf.netty-util:1.1.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.protocol.framework.AbstractProtocolSession.channelRead0(AbstractProtocolSession.java:53)&lt;span class=&quot;error&quot;&gt;&amp;#91;107:org.opendaylight.controller.protocol-framework:0.8.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:276)&lt;span class=&quot;error&quot;&gt;&amp;#91;93:io.netty.codec:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:263)&lt;span class=&quot;error&quot;&gt;&amp;#91;93:io.netty.codec:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:276)&lt;span class=&quot;error&quot;&gt;&amp;#91;93:io.netty.codec:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:263)&lt;span class=&quot;error&quot;&gt;&amp;#91;93:io.netty.codec:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:318)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:304)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:846)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.local.LocalChannel.finishPeerRead0(LocalChannel.java:427)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.local.LocalChannel.access$500(LocalChannel.java:48)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.local.LocalChannel$5.run(LocalChannel.java:383)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:358)&lt;span class=&quot;error&quot;&gt;&amp;#91;91:io.netty.common:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)&lt;span class=&quot;error&quot;&gt;&amp;#91;92:io.netty.transport:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:112)&lt;span class=&quot;error&quot;&gt;&amp;#91;91:io.netty.common:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)&lt;span class=&quot;error&quot;&gt;&amp;#91;91:io.netty.common:4.0.33.Final&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.lang.Thread.run(Thread.java:745)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
Caused by: javax.management.RuntimeMBeanException: javax.management.RuntimeMBeanException: java.lang.IllegalArgumentException: Null not supported&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.rethrow(DefaultMBeanServerInterceptor.java:839)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.rethrowMaybeMBeanException(DefaultMBeanServerInterceptor.java:852)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.setAttribute(DefaultMBeanServerInterceptor.java:752)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.JmxMBeanServer.setAttribute(JmxMBeanServer.java:739)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.util.ConfigTransactionJMXClient.setAttribute(ConfigTransactionJMXClient.java:288)&lt;span class=&quot;error&quot;&gt;&amp;#91;127:org.opendaylight.controller.config-util:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.facade.xml.strategy.ReplaceEditConfigStrategy.executeStrategy(ReplaceEditConfigStrategy.java:49)&lt;span class=&quot;error&quot;&gt;&amp;#91;133:org.opendaylight.controller.config-manager-facade-xml:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	... 38 more&lt;br/&gt;
Caused by: javax.management.RuntimeMBeanException: java.lang.IllegalArgumentException: Null not supported&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.rethrow(DefaultMBeanServerInterceptor.java:839)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.rethrowMaybeMBeanException(DefaultMBeanServerInterceptor.java:852)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.setAttribute(DefaultMBeanServerInterceptor.java:752)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.JmxMBeanServer.setAttribute(JmxMBeanServer.java:739)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at org.opendaylight.controller.config.manager.impl.dynamicmbean.DynamicWritableWrapper.setAttribute(DynamicWritableWrapper.java:96)&lt;span class=&quot;error&quot;&gt;&amp;#91;131:org.opendaylight.controller.config-manager:0.5.0.SNAPSHOT&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.setAttribute(DefaultMBeanServerInterceptor.java:746)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	... 41 more&lt;br/&gt;
Caused by: java.lang.IllegalArgumentException: Null not supported&lt;br/&gt;
	at org.opendaylight.controller.config.yang.bgp.rib.impl.AbstractBGPPeerModule.setAddPath(AbstractBGPPeerModule.java:282)&lt;br/&gt;
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.lang.reflect.Method.invoke(Method.java:497)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)&lt;br/&gt;
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at java.lang.reflect.Method.invoke(Method.java:497)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:193)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.ConvertingMethod.invokeWithOpenReturn(ConvertingMethod.java:175)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:117)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.MXBeanIntrospector.invokeM2(MXBeanIntrospector.java:54)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeSetter(MBeanIntrospector.java:267)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.PerInterface.setAttribute(PerInterface.java:102)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.mbeanserver.MBeanSupport.setAttribute(MBeanSupport.java:230)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.setAttribute(DefaultMBeanServerInterceptor.java:746)&lt;span class=&quot;error&quot;&gt;&amp;#91;:1.8.0_66&amp;#93;&lt;/span&gt;&lt;br/&gt;
	... 44 more&lt;/p&gt;

&lt;p&gt;The system complains about missing (null) &quot;add-path&quot; attribute. The &quot;add-path&quot; is defined in odl-bgp-rib-rib-impl-cfg.yang as&lt;br/&gt;
            list add-path {&lt;br/&gt;
                key &quot;type name&quot;;&lt;br/&gt;
                uses config:service-ref {&lt;br/&gt;
                    refine type &lt;/p&gt;
{
                        config:required-identity add-path;
                    }
&lt;p&gt;                }&lt;br/&gt;
            }&lt;/p&gt;

&lt;p&gt;The input XML does not contain any entry with add-path dependency. When the same module is defined in initial config xml file - it works.&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="26048">CONTROLLER-1494</key>
            <summary>Fails to inject config module with no list dependency entry</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                                <status id="5" iconUrl="https://jira.opendaylight.org/images/icons/statuses/resolved.png" description="A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.">Resolved</status>
                    <statusCategory id="3" key="done" colorName="green"/>
                                    <resolution id="10000">Done</resolution>
                                        <assignee username="andrej.mak@pantheon.tech">Andrej Mak</assignee>
                                    <reporter username="milos.fabian@pantheon.tech">Milos Fabian</reporter>
                        <labels>
                    </labels>
                <created>Tue, 1 Mar 2016 10:25:45 +0000</created>
                <updated>Tue, 25 Jul 2023 08:24:08 +0000</updated>
                            <resolved>Wed, 20 Apr 2016 08:45:46 +0000</resolved>
                                                                    <component>config</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>4</watches>
                                                                                                                <comments>
                            <comment id="51348" author="yin.kangqian@zte.com.cn" created="Thu, 7 Apr 2016 03:02:31 +0000"  >&lt;p&gt;Did you specify value of &quot;replace&quot; in &quot;default-operation&quot; attribute of &quot;edit-config&quot; tag in your netconf message to configure example-bgp-peer module?&lt;/p&gt;

&lt;p&gt;I&apos;ve tested that if &quot;merge&quot; specifed, such netconf message in &lt;a href=&quot;https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer_2&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://wiki.opendaylight.org/view/BGP_LS_PCEP:User_Guide#BGP_Peer_2&lt;/a&gt; can be commited correctly. If &quot;replace&quot; specified, such netconf message will yield similar errors as you encounterd.&lt;/p&gt;

&lt;p&gt;RFC6241 definitely says that &quot;merge&quot; is the default behaviour in Section 7.2. So odl config subsystem pushes xml config file in merge strategy. That&apos;s why such netconf messages in 41-bgp-example.xml can be pushed correctly.&lt;/p&gt;</comment>
                            <comment id="51349" author="vrpolak" created="Thu, 7 Apr 2016 11:23:14 +0000"  >&lt;p&gt;As far as I know, using RESTCONF via netconf-connector picks operation based on HTTP method. POST means create, PUT means replace, and I guess merge can be achieved using PATCH.&lt;br/&gt;
I have not tried using POST (or PATCH), but I believe replace ought to work in this use case.&lt;/p&gt;</comment>
                            <comment id="51350" author="yin.kangqian@zte.com.cn" created="Fri, 8 Apr 2016 11:34:09 +0000"  >&lt;p&gt;Just as Vratko said, POST means create, PUT means replace. So when I tried to POST or PUT a new value to an attribute of an existing module through RESTCONF, both failed. When I tried to PATCH, ODL controller complained as following:&lt;/p&gt;

&lt;p&gt;&amp;lt; HTTP/1.1 405 Method Not Allowed&lt;br/&gt;
&amp;lt; Allow: POST,GET,DELETE,OPTIONS,HEAD,PUT&lt;br/&gt;
&amp;lt; Content-Length: 0&lt;br/&gt;
&amp;lt; Server: Jetty(8.1.15.v20140411)&lt;/p&gt;

&lt;p&gt;Since PUT means replace, then I wanted to PUT new value to RESTCONF URI of the node of the attribute of the module, it still failed because the attribute node is a Leaf yang type.  Current ODL netconf operations only support to PUT a node of Container or List yang type.&lt;/p&gt;

&lt;p&gt;Summing up my experiments, I haven&apos;t found a convenient way to assign new value to a leaf node attribute of an existing module. If it&apos;s true for ODL, we need to add a such  way.&lt;/p&gt;</comment>
                            <comment id="51351" author="yin.kangqian@zte.com.cn" created="Fri, 8 Apr 2016 12:02:16 +0000"  >&lt;p&gt;(In reply to Kangqian Yin from comment #3)&lt;br/&gt;
&amp;gt; Just as Vratko said, POST means create, PUT means replace. So when I tried&lt;br/&gt;
&amp;gt; to POST or PUT a new value to an attribute of an existing module through&lt;br/&gt;
&amp;gt; RESTCONF, both failed. When I tried to PATCH, ODL controller complained as&lt;br/&gt;
&amp;gt; following:&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; &amp;lt; HTTP/1.1 405 Method Not Allowed&lt;br/&gt;
&amp;gt; &amp;lt; Allow: POST,GET,DELETE,OPTIONS,HEAD,PUT&lt;br/&gt;
&amp;gt; &amp;lt; Content-Length: 0&lt;br/&gt;
&amp;gt; &amp;lt; Server: Jetty(8.1.15.v20140411)&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; Since PUT means replace, then I wanted to PUT new value to RESTCONF URI of&lt;br/&gt;
&amp;gt; the node of the attribute of the module, it still failed because the&lt;br/&gt;
&amp;gt; attribute node is a Leaf yang type.  Current ODL netconf operations only&lt;br/&gt;
&amp;gt; support to PUT a node of Container or List yang type.&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; Summing up my experiments, I haven&apos;t found a convenient way to assign new&lt;br/&gt;
&amp;gt; value to a leaf node attribute of an existing module. If it&apos;s true for ODL,&lt;br/&gt;
&amp;gt; we need to add a such  way.&lt;/p&gt;

&lt;p&gt;It&apos;s more accurate to say that current ODL netconf server only supports to PUT a node of Container or List yang type through RESTCONF. And there is a convenient way to assign new value to a leaf node attribute of an existing module through netconf messages issued by sucn netconf client as Netconf Browser. It seems lacking of such way through RESTCONF in ODL.&lt;/p&gt;</comment>
                            <comment id="51352" author="vrpolak" created="Fri, 8 Apr 2016 12:31:52 +0000"  >&lt;p&gt;&amp;lt; Allow: POST,GET,DELETE,OPTIONS,HEAD,PUT&lt;/p&gt;

&lt;p&gt;Which version of ODL are you using? I believe PATCH is supported since Beryllium-SR1.&lt;br/&gt;
&lt;a href=&quot;https://git.opendaylight.org/gerrit/36163&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/36163&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;gt; only supports to PUT a node of Container or List yang type through RESTCONF.&lt;/p&gt;

&lt;p&gt;True for RESTCONF as far as I know.&lt;br/&gt;
&lt;a href=&quot;https://bugs.opendaylight.org/show_bug.cgi?id=1013&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://bugs.opendaylight.org/show_bug.cgi?id=1013&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;gt; current ODL netconf server only supports to PUT a node of Container or List yang type&lt;/p&gt;

&lt;p&gt;ODL contains two netconf servers. One for config subsystem (relevant for this Bug) and one for MD-SAL (not relevant here).&lt;br/&gt;
The config subsystem server supports operations on containers (maybe also lists), but only if they are at the top level of their module.&lt;br/&gt;
&lt;a href=&quot;https://bugs.opendaylight.org/show_bug.cgi?id=3753&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://bugs.opendaylight.org/show_bug.cgi?id=3753&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="51353" author="yin.kangqian@zte.com.cn" created="Mon, 11 Apr 2016 10:23:20 +0000"  >&lt;p&gt;(In reply to Vratko Pol&#225;k from comment #5)&lt;br/&gt;
&amp;gt; &amp;lt; Allow: POST,GET,DELETE,OPTIONS,HEAD,PUT&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; Which version of ODL are you using? I believe PATCH is supported since&lt;br/&gt;
&amp;gt; Beryllium-SR1.&lt;br/&gt;
&amp;gt; &lt;a href=&quot;https://git.opendaylight.org/gerrit/36163&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/36163&lt;/a&gt;&lt;br/&gt;
&amp;gt; &lt;/p&gt;

&lt;p&gt;&amp;gt;&amp;gt; My experiments were done with Li-SR4 version of ODL. And I&apos;ve just tried the master branch version of ODL and got the same result. It&apos;s because Jetty server is still 8.1.5.v20140411 in current version of ODL as in Li-SR4.&lt;/p&gt;</comment>
                            <comment id="51354" author="andrej.mak@pantheon.tech" created="Tue, 12 Apr 2016 08:18:07 +0000"  >&lt;p&gt;Empty list allowed by patch&lt;br/&gt;
&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/37433/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/37433/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, module odl-bgp-rib-impl-cfg.yang is not valid. &lt;br/&gt;
Augment &quot;/config:modules/config:module/config:configuration&quot; cases bgp-peer and bgp-application-peer contains node with same name - &quot;peer-registry&quot;, which is not allowed by yang rfc.&lt;/p&gt;</comment>
                            <comment id="51355" author="milos.fabian@pantheon.tech" created="Tue, 12 Apr 2016 08:37:24 +0000"  >&lt;p&gt;(In reply to Andrej Mak from comment #7)&lt;br/&gt;
&amp;gt; Empty list allowed by patch&lt;br/&gt;
&amp;gt; &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/37433/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/37433/&lt;/a&gt;&lt;br/&gt;
&amp;gt; &lt;br/&gt;
&amp;gt; However, module odl-bgp-rib-impl-cfg.yang is not valid. &lt;br/&gt;
&amp;gt; Augment &quot;/config:modules/config:module/config:configuration&quot; cases bgp-peer&lt;br/&gt;
&amp;gt; and bgp-application-peer contains node with same name - &quot;peer-registry&quot;,&lt;br/&gt;
&amp;gt; which is not allowed by yang rfc.&lt;/p&gt;

&lt;p&gt;Good point, thanks Andrej!&lt;/p&gt;</comment>
                            <comment id="51356" author="yin.kangqian@zte.com.cn" created="Tue, 19 Apr 2016 03:38:24 +0000"  >&lt;p&gt;Let me explain Andrej&apos;s fixing. Andrej just modified a few lines in TemplateFactory.java which is part of yang-jmx-generator plugin. &lt;br/&gt;
How does it fix this bug? &lt;/p&gt;

&lt;p&gt;The key to understand this is in the attribute setters of AbstractXXXModule&lt;br/&gt;
generated by yang-jmx-generator plugin from the YANG file of a ODL &lt;br/&gt;
configuration module. &lt;/p&gt;

&lt;p&gt;Current setter of a list node attribute is like the following:&lt;/p&gt;

&lt;p&gt;public void setLocalTable(java.util.List&amp;lt;javax.management.ObjectName&amp;gt; localTable) {&lt;br/&gt;
  if (localTable == null) throw new IllegalArgumentException(&quot;Null not supported&quot;);&lt;br/&gt;
  this.localTable = localTable;&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;Andrej&apos;s fixing changed it to be somehow like this:&lt;/p&gt;

&lt;p&gt;public void setLocalTable(java.util.List&amp;lt;javax.management.ObjectName&amp;gt; localTable) {&lt;br/&gt;
  if (localTable == null) &lt;/p&gt;
{ localTable = new java.util.ArrayList&amp;lt;&amp;gt;(); }
&lt;p&gt;;&lt;br/&gt;
  this.localTable = localTable;&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;So new attributes of a module with empty lists can be set and merged with current attributes of a module successfully.&lt;/p&gt;</comment>
                    </comments>
                <issuelinks>
                            <issuelinktype id="10000">
                    <name>Blocks</name>
                                            <outwardlinks description="blocks">
                                        <issuelink>
            <issuekey id="23649">BGPCEP-409</issuekey>
        </issuelink>
                            </outwardlinks>
                                                        </issuelinktype>
                    </issuelinks>
                <attachments>
                    </attachments>
                <subtasks>
                    </subtasks>
                <customfields>
                                                                            <customfield id="customfield_11400" key="com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary">
                        <customfieldname>Development</customfieldname>
                        <customfieldvalues>
                            
                        </customfieldvalues>
                    </customfield>
                                                                                                                        <customfield id="customfield_10208" key="com.atlassian.jira.plugin.system.customfieldtypes:textfield">
                        <customfieldname>External issue ID</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>5444</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                <customfield id="customfield_10201" key="com.atlassian.jira.plugin.system.customfieldtypes:url">
                        <customfieldname>External issue URL</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue><![CDATA[https://bugs.opendaylight.org/show_bug.cgi?id=5444]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                            <customfield id="customfield_10206" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Issue Type</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10300"><![CDATA[Bug]]></customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <customfield id="customfield_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i02qx3:</customfieldvalue>

                        </customfieldvalues>
                    </customfield>
                                                                                                                                                                                </customfields>
    </item>
</channel>
</rss>