<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:23:36 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>[NETVIRT-1249] Thread terminated due to an uncaught exception</title>
                <link>https://jira.opendaylight.org/browse/NETVIRT-1249</link>
                <project id="10144" key="NETVIRT">netvirt</project>
                    <description>&lt;p&gt;When running downstream scale/perf testing we see that some VMs remain unpingable even after 300 seconds and we see a lot of the exceptions in karaf logs when running following tests and ping fails&lt;/p&gt;

&lt;p&gt;Create a network&lt;br/&gt;
Create a sbunet&lt;br/&gt;
Create a router&lt;br/&gt;
Attach router to subnet and oublic network&lt;br/&gt;
Boot VM with floating IP&lt;br/&gt;
Ping VM&lt;/p&gt;

&lt;p&gt;Exceptions&lt;br/&gt;
--------------&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;2018-04-13T22:57:05,411 | ERROR | org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.napt.switches.RouterToNaptSwitch_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | AsyncDataTreeChangeListenerBase  | 263 - org.opendaylight.genius.mdsalutil-api - 0.4.0.redhat-5 | Thread terminated due to uncaught exception: org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.napt.switches.RouterToNaptSwitch_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0
java.lang.IllegalArgumentException: Invalid range: -1, expected: [[0..18446744073709551615]].
        at org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder.checkTunnelIdRange(TunnelBuilder.java:76) 
        at org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder.setTunnelId(TunnelBuilder.java:81) 
        at org.opendaylight.genius.mdsalutil.matches.MatchTunnelId.populateBuilder(MatchTunnelId.java:40) 
        at org.opendaylight.genius.mdsalutil.matches.MatchTunnelId.populateBuilder(MatchTunnelId.java:18) 
        at org.opendaylight.genius.mdsalutil.matches.MatchInfoHelper.createInnerMatchBuilder(MatchInfoHelper.java:29) [
        at org.opendaylight.genius.mdsalutil.MDSALUtil.buildMatches(MDSALUtil.java:336) 
        at org.opendaylight.genius.mdsalutil.FlowEntity.getFlowBuilder(FlowEntity.java:87) 
        at org.opendaylight.genius.mdsalutil.internal.MDSALManager.writeFlowEntityInternal(MDSALManager.java:180) 
        at org.opendaylight.genius.mdsalutil.internal.MDSALManager.installFlowInternal(MDSALManager.java:142) 
        at org.opendaylight.genius.mdsalutil.internal.MDSALManager.installFlow(MDSALManager.java:609) 
        at Proxya2c1fd24_dd19_4d37_b669_2a61174cba99.installFlow(Unknown Source) [?:?]
        at Proxy8f8e72d8_5b27_48d7_a9e4_a78c5736e1ae.installFlow(Unknown Source) [?:?]
        at org.opendaylight.netvirt.natservice.internal.AbstractSnatService.syncFlow(AbstractSnatService.java:329)
        at org.opendaylight.netvirt.natservice.internal.ConntrackBasedSnatService.installTerminatingServiceTblEntry(ConntrackBasedSnatService.java:148) 
        at org.opendaylight.netvirt.natservice.internal.ConntrackBasedSnatService.installSnatSpecificEntriesForNaptSwitch(ConntrackBasedSnatService.java:73) 
        at org.opendaylight.netvirt.natservice.internal.AbstractSnatService.handleSnat(AbstractSnatService.java:126) 
        at org.opendaylight.netvirt.natservice.internal.FlatVlanConntrackBasedSnatService.handleSnat(FlatVlanConntrackBasedSnatService.java:49)
        at org.opendaylight.netvirt.natservice.internal.AbstractSnatService.handleSnatAllSwitch(AbstractSnatService.java:105)
        at org.opendaylight.netvirt.natservice.internal.FlatVlanConntrackBasedSnatService.handleSnatAllSwitch(FlatVlanConntrackBasedSnatService.java:39) 
        at org.opendaylight.netvirt.natservice.internal.SnatServiceManagerImpl.notify(SnatServiceManagerImpl.java:57)
        at org.opendaylight.netvirt.natservice.ha.SnatCentralizedSwitchChangeListener.add(SnatCentralizedSwitchChangeListener.java:87) 
        at org.opendaylight.netvirt.natservice.ha.SnatCentralizedSwitchChangeListener.add(SnatCentralizedSwitchChangeListener.java:32) 
        at org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run(AsyncDataTreeChangeListenerBase.java:167) 
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Looking at rest of the logs, the core issue is getting notifications for gw mac port creation before neutron router is created.&lt;/p&gt;

&lt;div class=&quot;preformatted panel&quot; style=&quot;border-width: 1px;&quot;&gt;&lt;div class=&quot;preformattedContent panelContent&quot;&gt;
&lt;pre&gt;2018-05-03T13:22:28,967 | WARN  | org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | NeutronPortChangeListener        | 362 - org.opendaylight.netvirt.neutronvpn-impl - 0.6.0 | *No router found for router GW port c69fd64f-4c6a-43a6-ae21-c72f11d29a72 for router *29ec1425-72df-4b11-9327-527cf41d58a9


2018-05-03T13:22:29,263 | INFO  | org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l3.rev150712.routers.attributes.routers.Router_AsyncClusteredDataTreeChangeListenerBase-DataTreeChangeHandler-0 | NeutronRouterChangeListener      | 356 - org.opendaylight.netvirt.ipv6service-impl - 0.6.0 | Add Router notification handler is invoked Uuid [_value=29ec1425-72df-4b11-9327-527cf41d58a9].

2018-05-03T13:22:29,283 | INFO  | ForkJoinPool-2-worker-34 | VpnInstanceListener              | 370 - org.opendaylight.netvirt.vpnmanager-impl - 0.6.0| VPN-ADD: addVpnInstance: VPN Id 106159 generated for VpnInstanceName 29ec1425-72df-4b11-9327-527cf41d58a9
&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;blockquote&gt;&lt;p&gt;        Router router = neutronvpnUtils.getNeutronRouter(routerId);&lt;br/&gt;
        if (router == null) {&lt;br/&gt;
            LOG.warn(&quot;No router found for router GW port {} for router {}&quot;, routerGwPort.getUuid().getValue(),&lt;br/&gt;
                    routerId.getValue());&lt;br/&gt;
            return;&lt;br/&gt;
        }&lt;br/&gt;
        gwMacResolver.sendArpRequestsToExtGateways(router);&lt;/p&gt;

&lt;p&gt;        setExternalGwMac(routerGwPort, routerId);&lt;br/&gt;
    }&lt;/p&gt;

&lt;p&gt;    private void setExternalGwMac(Port routerGwPort, Uuid routerId) {&lt;br/&gt;
        // During full-sync networking-odl syncs routers before ports. As such,&lt;br/&gt;
        // the MAC of the router&apos;s gw port is not available to be set when the&lt;br/&gt;
        // router is written. We catch that here.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;This means it is not an issue of notifications out of order, but getting gw port notification before router was created in mdsal. The most likely reason for this is n-odl sending out of order, but it shouldn&apos;t result in unhandled exception and thread termination.&lt;/p&gt;</description>
                <environment>&lt;p&gt;When running following test case in downstream scale/perf setup&lt;br/&gt;
Create a network&lt;br/&gt;
Create a sbunet&lt;br/&gt;
Create a router&lt;br/&gt;
Attach router to subnet and oublic network&lt;br/&gt;
Boot VM with floating IP&lt;br/&gt;
Ping VM&lt;/p&gt;

&lt;p&gt;we see that some VMs remain unpingable even after 300 seconds and we see a lot of the following exceptions in karaf logs&lt;/p&gt;

&lt;p&gt;2018-04-13T22:57:05,411 | ERROR | org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.napt.switches.RouterToNaptSwitch_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | AsyncDataTreeChangeListenerBase  | 263 - org.opendaylight.genius.mdsalutil-api - 0.4.0 | Thread terminated due to uncaught exception: org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.rev160111.napt.switches.RouterToNaptSwitch_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0&lt;br/&gt;
java.lang.IllegalArgumentException: Invalid range: -1, expected: [&lt;span class=&quot;error&quot;&gt;&amp;#91;0..18446744073709551615&amp;#93;&lt;/span&gt;].&lt;br/&gt;
        at org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder.checkTunnelIdRange(TunnelBuilder.java:76) &lt;span class=&quot;error&quot;&gt;&amp;#91;391:org.opendaylight.openflowplugin.model.flow-base:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.TunnelBuilder.setTunnelId(TunnelBuilder.java:81) &lt;span class=&quot;error&quot;&gt;&amp;#91;391:org.opendaylight.openflowplugin.model.flow-base:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.matches.MatchTunnelId.populateBuilder(MatchTunnelId.java:40) &lt;span class=&quot;error&quot;&gt;&amp;#91;263:org.opendaylight.genius.mdsalutil-api:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.matches.MatchTunnelId.populateBuilder(MatchTunnelId.java:18) &lt;span class=&quot;error&quot;&gt;&amp;#91;263:org.opendaylight.genius.mdsalutil-api:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.matches.MatchInfoHelper.createInnerMatchBuilder(MatchInfoHelper.java:29) &lt;span class=&quot;error&quot;&gt;&amp;#91;263:org.opendaylight.genius.mdsalutil-api:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.MDSALUtil.buildMatches(MDSALUtil.java:336) &lt;span class=&quot;error&quot;&gt;&amp;#91;263:org.opendaylight.genius.mdsalutil-api:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.FlowEntity.getFlowBuilder(FlowEntity.java:87) &lt;span class=&quot;error&quot;&gt;&amp;#91;263:org.opendaylight.genius.mdsalutil-api:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.internal.MDSALManager.writeFlowEntityInternal(MDSALManager.java:180) &lt;span class=&quot;error&quot;&gt;&amp;#91;264:org.opendaylight.genius.mdsalutil-impl:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.internal.MDSALManager.installFlowInternal(MDSALManager.java:142) &lt;span class=&quot;error&quot;&gt;&amp;#91;264:org.opendaylight.genius.mdsalutil-impl:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.mdsalutil.internal.MDSALManager.installFlow(MDSALManager.java:609) &lt;span class=&quot;error&quot;&gt;&amp;#91;264:org.opendaylight.genius.mdsalutil-impl:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at Proxya2c1fd24_dd19_4d37_b669_2a61174cba99.installFlow(Unknown Source) &lt;span class=&quot;error&quot;&gt;&amp;#91;?:?&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at Proxy8f8e72d8_5b27_48d7_a9e4_a78c5736e1ae.installFlow(Unknown Source) &lt;span class=&quot;error&quot;&gt;&amp;#91;?:?&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.AbstractSnatService.syncFlow(AbstractSnatService.java:329) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.ConntrackBasedSnatService.installTerminatingServiceTblEntry(ConntrackBasedSnatService.java:148) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.ConntrackBasedSnatService.installSnatSpecificEntriesForNaptSwitch(ConntrackBasedSnatService.java:73) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.AbstractSnatService.handleSnat(AbstractSnatService.java:126) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.FlatVlanConntrackBasedSnatService.handleSnat(FlatVlanConntrackBasedSnatService.java:49) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.AbstractSnatService.handleSnatAllSwitch(AbstractSnatService.java:105) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.FlatVlanConntrackBasedSnatService.handleSnatAllSwitch(FlatVlanConntrackBasedSnatService.java:39) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.internal.SnatServiceManagerImpl.notify(SnatServiceManagerImpl.java:57) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.ha.SnatCentralizedSwitchChangeListener.add(SnatCentralizedSwitchChangeListener.java:87) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.netvirt.natservice.ha.SnatCentralizedSwitchChangeListener.add(SnatCentralizedSwitchChangeListener.java:32) &lt;span class=&quot;error&quot;&gt;&amp;#91;360:org.opendaylight.netvirt.natservice-impl:0.6.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run(AsyncDataTreeChangeListenerBase.java:167) &lt;span class=&quot;error&quot;&gt;&amp;#91;263:org.opendaylight.genius.mdsalutil-api:0.4.0&amp;#93;&lt;/span&gt;&lt;br/&gt;
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) &lt;span class=&quot;error&quot;&gt;&amp;#91;?:?&amp;#93;&lt;/span&gt;&lt;/p&gt;


&lt;p&gt;Core issue is getting gw port notification before router was created in mdsal as confirmed by following log entry:&lt;/p&gt;

&lt;p&gt;2018-05-03T13:22:28,967 | WARN  | org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | NeutronPortChangeListener        | 362 - org.opendaylight.netvirt.neutronvpn-impl - 0.6.0 | No router found for router GW port c69fd64f-4c6a-43a6-ae21-c72f11d29a72 for router 29ec1425-72df-4b11-9327-527cf41d58a9&lt;/p&gt;


&lt;p&gt;{{        Router router = neutronvpnUtils.getNeutronRouter(routerId);&lt;br/&gt;
        if (router == null) {&lt;br/&gt;
            LOG.warn(&quot;No router found for router GW port {} for router {}&quot;, routerGwPort.getUuid().getValue(),&lt;br/&gt;
                    routerId.getValue());&lt;br/&gt;
            return;&lt;br/&gt;
        }&lt;br/&gt;
        gwMacResolver.sendArpRequestsToExtGateways(router);&lt;/p&gt;

&lt;p&gt;        setExternalGwMac(routerGwPort, routerId);&lt;br/&gt;
    }&lt;/p&gt;

&lt;p&gt;    private void setExternalGwMac(Port routerGwPort, Uuid routerId) {&lt;br/&gt;
        // During full-sync networking-odl syncs routers before ports. As such,&lt;br/&gt;
        // the MAC of the router&apos;s gw port is not available to be set when the&lt;br/&gt;
        // router is written. We catch that here.}}&lt;/p&gt;


&lt;p&gt;The most likely reason for this is n-odl sending out of order and should be addressed in n-odl/NN. But even then it shouldn&apos;t lead to unhandled exception and thread termination. Since it is a race condition, a simple retry might be enough to avoid this problem.&lt;/p&gt;</environment>
        <key id="29944">NETVIRT-1249</key>
            <summary>Thread terminated due to an uncaught exception</summary>
                <type id="10104" iconUrl="https://jira.opendaylight.org/secure/viewavatar?size=xsmall&amp;avatarId=10303&amp;avatarType=issuetype">Bug</type>
                                            <priority id="3" iconUrl="https://jira.opendaylight.org/images/icons/priorities/major.svg">Medium</priority>
                        <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="thapar">Vishal Thapar</assignee>
                                    <reporter username="thapar">Vishal Thapar</reporter>
                        <labels>
                    </labels>
                <created>Tue, 8 May 2018 12:57:48 +0000</created>
                <updated>Wed, 4 Jul 2018 06:06:53 +0000</updated>
                            <resolved>Wed, 4 Jul 2018 06:06:53 +0000</resolved>
                                    <version>Fluorine</version>
                                                    <component>General</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="63477" author="thapar" created="Tue, 19 Jun 2018 03:31:21 +0000"  >&lt;p&gt;Requires &lt;a href=&quot;https://git.opendaylight.org/gerrit/73136&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/73136&lt;/a&gt; to work.&lt;/p&gt;</comment>
                            <comment id="63485" author="shague@redhat.com" created="Tue, 19 Jun 2018 14:14:57 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=thapar&quot; class=&quot;user-hover&quot; rel=&quot;thapar&quot;&gt;thapar&lt;/a&gt; are you saying the bug is fixed with the genius patch or that your patches are still required and will now work?&lt;/p&gt;</comment>
                            <comment id="63486" author="thapar" created="Tue, 19 Jun 2018 14:24:33 +0000"  >&lt;p&gt;&lt;a href=&quot;https://jira.opendaylight.org/secure/ViewProfile.jspa?name=shague&quot; class=&quot;user-hover&quot; rel=&quot;shague&quot;&gt;shague&lt;/a&gt; My netvirt patch is still required and will work after genius one. My patch was using genius API that was broken so patch was basically not doing anything, except for the exception catch in natservice code. Genius patch fixes the broken API.&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_10202" key="com.atlassian.jira.plugin.system.customfieldtypes:select">
                        <customfieldname>Priority</customfieldname>
                        <customfieldvalues>
                                <customfieldvalue key="10301"><![CDATA[Normal]]></customfieldvalue>

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

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