<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:54:19 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>[YANGTOOLS-790] BGP models not compatible with leafref context</title>
                <link>https://jira.opendaylight.org/browse/YANGTOOLS-790</link>
                <project id="10188" key="YANGTOOLS">yangtools</project>
                    <description>&lt;p&gt;While trying to create LeafRefContext(yangtools) it appears that bgp models contains some leafref configuration that is invalid. Following error is showed&lt;/p&gt;

&lt;p&gt;org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParseException: No module import for prefix: bgp-pol in module: openconfig-routing-policy&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParserListenerImpl.getQNameModuleForImportPrefix(LeafRefPathParserListenerImpl.java:178)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParserListenerImpl.enterPrefix(LeafRefPathParserListenerImpl.java:121)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParser$PrefixContext.enterRule(LeafRefPathParser.java:997)&lt;br/&gt;
	at org.antlr.v4.runtime.tree.ParseTreeWalker.enterRule(ParseTreeWalker.java:66)&lt;br/&gt;
	at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:49)&lt;br/&gt;
	at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)&lt;br/&gt;
	at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)&lt;br/&gt;
	at org.antlr.v4.runtime.tree.ParseTreeWalker.walk(ParseTreeWalker.java:52)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefPathParserImpl.parseLeafRefPathSourceToSchemaPath(LeafRefPathParserImpl.java:37)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:134)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextReferencingTree(LeafRefContextTreeBuilder.java:92)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContextTreeBuilder.buildLeafRefContextTree(LeafRefContextTreeBuilder.java:48)&lt;br/&gt;
	at org.opendaylight.yangtools.yang.data.impl.leafref.LeafRefContext.create(LeafRefContext.java:53)&lt;br/&gt;
	at io.fd.hc2vpp.model.test.LeafRefContextTest.testLeafRefContextCreation(LeafRefContextTest.java:48)&lt;br/&gt;
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br/&gt;
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&lt;br/&gt;
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;br/&gt;
	at java.lang.reflect.Method.invoke(Method.java:498)&lt;br/&gt;
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)&lt;br/&gt;
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)&lt;br/&gt;
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)&lt;br/&gt;
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)&lt;br/&gt;
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)&lt;br/&gt;
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)&lt;br/&gt;
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)&lt;br/&gt;
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)&lt;br/&gt;
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)&lt;br/&gt;
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)&lt;br/&gt;
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)&lt;br/&gt;
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)&lt;br/&gt;
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)&lt;br/&gt;
	at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)&lt;br/&gt;
	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)&lt;br/&gt;
	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)&lt;br/&gt;
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br/&gt;
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)&lt;br/&gt;
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;br/&gt;
	at java.lang.reflect.Method.invoke(Method.java:498)&lt;br/&gt;
	at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)&lt;br/&gt;
	at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)&lt;br/&gt;
	at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)&lt;br/&gt;
	at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)&lt;br/&gt;
	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)  &lt;/p&gt;

&lt;p&gt;Can be reproduced with following test:&lt;/p&gt;

&lt;p&gt;public class LeafRefContextTest {&lt;/p&gt;

&lt;p&gt;    private static final String YANG_BA_PROVIDER_PATH = &quot;META-INF/services/&quot; + YangModelBindingProvider.class.getName();&lt;/p&gt;

&lt;p&gt;    @Test&lt;br/&gt;
    public void testLeafRefContextCreation() &lt;/p&gt;
{
        assertNotNull(LeafRefContext.create(context()));
    }

&lt;p&gt;    private SchemaContext context() &lt;/p&gt;
{

        ModuleInfoBackedContext ctx = ModuleInfoBackedContext.create();
        final Set&amp;lt;YangModuleInfo&amp;gt; modules = modules();
        checkState(!modules.isEmpty(), &quot;No modules found&quot;);
        ctx.addModuleInfos(modules);

        return ctx.getSchemaContext();
    }

&lt;p&gt;    private Set&amp;lt;YangModuleInfo&amp;gt; modules() {&lt;br/&gt;
        try &lt;/p&gt;
{
            return Collections.list(getClass().getClassLoader().getResources(YANG_BA_PROVIDER_PATH))
                    .stream()
                    .map(LeafRefContextTest::urlToString)
                    .flatMap(content -&amp;gt; Arrays.stream(content.split(&quot;\n&quot;)))
                    .filter(line -&amp;gt; !Strings.isNullOrEmpty(line.trim()))
                    .map(LeafRefContextTest::loadClass)
                    .map(LeafRefContextTest::getInstance)
                    .map(YangModelBindingProvider.class::cast)
                    .map(YangModelBindingProvider::getModuleInfo)
                    .collect(Collectors.toSet());
        }
&lt;p&gt; catch (IOException e) &lt;/p&gt;
{
            throw new IllegalStateException(&quot;Unable to load binding providers from path: &quot; + YANG_BA_PROVIDER_PATH, e);
        }
&lt;p&gt;    }&lt;/p&gt;

&lt;p&gt;    private static Object getInstance(@Nonnull final Class&amp;lt;?&amp;gt; aClass) {&lt;br/&gt;
        try &lt;/p&gt;
{
            return aClass.newInstance();
        }
&lt;p&gt; catch (InstantiationException | IllegalAccessException e) &lt;/p&gt;
{
            throw new IllegalStateException(&quot;Unable to create instance of &quot; + aClass);
        }
&lt;p&gt;    }&lt;/p&gt;

&lt;p&gt;    private static Class&amp;lt;?&amp;gt; loadClass(@Nonnull final String className) {&lt;br/&gt;
        try &lt;/p&gt;
{
            return Class.forName(className);
        }
&lt;p&gt; catch (ClassNotFoundException e) &lt;/p&gt;
{
            throw new IllegalArgumentException(&quot;Unable to load class: &quot; + className, e);
        }
&lt;p&gt;    }&lt;/p&gt;

&lt;p&gt;    private static String urlToString(@Nonnull final URL url) {&lt;br/&gt;
        try &lt;/p&gt;
{
            return Resources.toString(url, Charsets.UTF_8);
        }
&lt;p&gt; catch (IOException e) &lt;/p&gt;
{
            throw new IllegalArgumentException(&quot;Unable to read resource from: &quot; + url, e);
        }
&lt;p&gt;    }&lt;br/&gt;
}&lt;/p&gt;

&lt;p&gt;And set of dependencies:&lt;/p&gt;

&lt;p&gt;&amp;lt;dependencies&amp;gt;&lt;br/&gt;
&amp;lt;dependency&amp;gt;&lt;br/&gt;
            &amp;lt;groupId&amp;gt;org.opendaylight.bgpcep&amp;lt;/groupId&amp;gt;&lt;br/&gt;
            &amp;lt;artifactId&amp;gt;bgp-rib-api&amp;lt;/artifactId&amp;gt;&lt;br/&gt;
            &amp;lt;version&amp;gt;${bgpcep.version}&amp;lt;/version&amp;gt;&lt;br/&gt;
        &amp;lt;/dependency&amp;gt;&lt;br/&gt;
        &amp;lt;dependency&amp;gt;&lt;br/&gt;
            &amp;lt;groupId&amp;gt;org.opendaylight.bgpcep&amp;lt;/groupId&amp;gt;&lt;br/&gt;
            &amp;lt;artifactId&amp;gt;bgp-bmp-api&amp;lt;/artifactId&amp;gt;&lt;br/&gt;
            &amp;lt;version&amp;gt;${bgpcep.version}&amp;lt;/version&amp;gt;&lt;br/&gt;
        &amp;lt;/dependency&amp;gt;&lt;br/&gt;
        &amp;lt;dependency&amp;gt;&lt;br/&gt;
            &amp;lt;groupId&amp;gt;org.opendaylight.bgpcep&amp;lt;/groupId&amp;gt;&lt;br/&gt;
            &amp;lt;artifactId&amp;gt;bgp-openconfig-api&amp;lt;/artifactId&amp;gt;&lt;br/&gt;
            &amp;lt;version&amp;gt;${bgpcep.version}&amp;lt;/version&amp;gt;&lt;br/&gt;
        &amp;lt;/dependency&amp;gt;&lt;br/&gt;
        &amp;lt;dependency&amp;gt;&lt;br/&gt;
            &amp;lt;groupId&amp;gt;org.opendaylight.bgpcep&amp;lt;/groupId&amp;gt;&lt;br/&gt;
            &amp;lt;artifactId&amp;gt;rsvp-api&amp;lt;/artifactId&amp;gt;&lt;br/&gt;
            &amp;lt;version&amp;gt;${bgpcep.version}&amp;lt;/version&amp;gt;&lt;br/&gt;
        &amp;lt;/dependency&amp;gt;&lt;br/&gt;
        &amp;lt;dependency&amp;gt;&lt;br/&gt;
            &amp;lt;groupId&amp;gt;org.opendaylight.bgpcep&amp;lt;/groupId&amp;gt;&lt;br/&gt;
            &amp;lt;artifactId&amp;gt;bgp-parser-api&amp;lt;/artifactId&amp;gt;&lt;br/&gt;
            &amp;lt;version&amp;gt;${bgpcep.version}&amp;lt;/version&amp;gt;&lt;br/&gt;
        &amp;lt;/dependency&amp;gt;&lt;br/&gt;
&amp;lt;/dependencies&amp;gt;&lt;/p&gt;</description>
                <environment>&lt;p&gt;Operating System: All&lt;br/&gt;
Platform: All&lt;/p&gt;</environment>
        <key id="23210">YANGTOOLS-790</key>
            <summary>BGP models not compatible with leafref context</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="pkajsa">Peter Kajsa</assignee>
                                    <reporter username="jsrnicek@cisco.com">Jan Srnicek</reporter>
                        <labels>
                    </labels>
                <created>Mon, 19 Jun 2017 10:54:06 +0000</created>
                <updated>Sun, 10 Apr 2022 18:36:00 +0000</updated>
                            <resolved>Thu, 28 Sep 2017 09:19:56 +0000</resolved>
                                                                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="44454" author="rovarga" created="Sat, 5 Aug 2017 16:58:39 +0000"  >&lt;p&gt;I do not see anything wrong with the BGP models, but it would seem the leafref parser is getting confused.&lt;/p&gt;</comment>
                            <comment id="44455" author="pkajsa" created="Wed, 9 Aug 2017 11:55:16 +0000"  >&lt;p&gt;I tried to replicate this bug, but I am getting different error:&lt;/p&gt;

&lt;p&gt;testLeafRefContextCreation(LeafRefContextTest): No child (&lt;a href=&quot;http://openconfig.net/yang/network-instance?revision=2015-10-18)network-instances&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;http://openconfig.net/yang/network-instance?revision=2015-10-18)network-instances&lt;/a&gt; found in node container ModuleEffectiveStatementImpl&lt;span class=&quot;error&quot;&gt;&amp;#91;name=bgp-openconfig-extensions, namespace=urn:opendaylight:params:xml:ns:yang:bgp:openconfig-extensions, revision=2016-06-14, prefix=odl-oc-ext, yangVersion=1&amp;#93;&lt;/span&gt; in module bgp-openconfig-extensions&lt;/p&gt;

&lt;p&gt;Please which version of bgpcep are you using (${bgpcep.version}) ?&lt;/p&gt;</comment>
                            <comment id="44456" author="jsrnicek@cisco.com" created="Wed, 9 Aug 2017 11:59:31 +0000"  >&lt;p&gt;This was present in BORON-SR4 , but fix for Carbon would be enough as we&apos;ve bumped recently&lt;/p&gt;</comment>
                            <comment id="44457" author="pkajsa" created="Wed, 9 Aug 2017 12:10:04 +0000"  >&lt;p&gt;Ok, thanks and please are you sure you are using the following fix ? &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/57224/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/57224/&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="44458" author="jsrnicek@cisco.com" created="Wed, 16 Aug 2017 11:45:30 +0000"  >&lt;p&gt;If that bugfix is part of Carbon SR1 then yes&lt;/p&gt;</comment>
                            <comment id="44459" author="jsrnicek@cisco.com" created="Wed, 16 Aug 2017 12:48:09 +0000"  >&lt;p&gt;Verified, getting the same error as Peter Kajsa&lt;/p&gt;</comment>
                            <comment id="44460" author="pkajsa" created="Thu, 7 Sep 2017 14:54:18 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/62832/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/62832/&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <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>8713</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=8713]]></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|i029ef:</customfieldvalue>

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