<!-- 
RSS generated by JIRA (8.20.10#820010-sha1:ace47f9899e9ee25d7157d59aa17ab06aee30d3d) at Wed Feb 07 20:23:18 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-1132] NPE: StateTunnelList_ADTCL handleTunnelEventForDpn: Unable to handle the tunnel event for srcDpnId 110780754426209 srcTepIp 10.30.170.87 remoteDpnId 106567621600656 destTepIp 10.30.170.102 handleTunnelEventForDPN(TunnelInterfaceStateListener.java:340)</title>
                <link>https://jira.opendaylight.org/browse/NETVIRT-1132</link>
                <project id="10144" key="NETVIRT">netvirt</project>
                    <description>&lt;p&gt;&lt;a href=&quot;https://logs.opendaylight.org/releng/vex-yul-odl-jenkins-1/netvirt-csit-1node-openstack-queens-upstream-stateful-oxygen/191/odl_1/odl1_karaf.log.gz&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://logs.opendaylight.org/releng/vex-yul-odl-jenkins-1/netvirt-csit-1node-openstack-queens-upstream-stateful-oxygen/191/odl_1/odl1_karaf.log.gz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The exception happens in the add and update paths. Add path is here and later is the update path:&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-03-06T05:23:47,604 | INFO  | org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | TunnelInterfaceStateListener     | 367 - org.opendaylight.netvirt.vpnmanager-impl - 0.6.0.SNAPSHOT | handleTunnelEventForDPN: Handle tunnel event for srcDpn 110780754426209 SrcTepIp 10.30.170.87 DestTepIp 10.30.170.102 
2018-03-06T05:23:47,604 | INFO  | org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | TunnelInterfaceStateListener     | 367 - org.opendaylight.netvirt.vpnmanager-impl - 0.6.0.SNAPSHOT | handleTunnelEventForDPN: Tunnel ADD event received for Dpn 110780754426209 VTEP Ip 10.30.170.87 destTepIp
2018-03-06T05:23:47,604 | INFO  | ForkJoinPool-1-worker-1 | ElanTunnelInterfaceStateListener | 348 - org.opendaylight.netvirt.elanmanager-impl - 0.6.0.SNAPSHOT | Handling tunnel state event for srcDpId 110780754426209 and dstDpId 106567621600656 
2018-03-06T05:23:47,605 | ERROR | org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | TunnelInterfaceStateListener     | 367 - org.opendaylight.netvirt.vpnmanager-impl - 0.6.0.SNAPSHOT | handleTunnelEventForDpn: Unable to handle the tunnel event for srcDpnId 110780754426209 srcTepIp 10.30.170.87 remoteDpnId 106567621600656 destTepIp 10.30.170.102
java.lang.NullPointerException: null
	at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.handleTunnelEventForDPN(TunnelInterfaceStateListener.java:340) [367:org.opendaylight.netvirt.vpnmanager-impl:0.6.0.SNAPSHOT]
	at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.add(TunnelInterfaceStateListener.java:217) [367:org.opendaylight.netvirt.vpnmanager-impl:0.6.0.SNAPSHOT]
	at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.add(TunnelInterfaceStateListener.java:76) [367:org.opendaylight.netvirt.vpnmanager-impl:0.6.0.SNAPSHOT]
	at org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run(AsyncDataTreeChangeListenerBase.java:167) [260:org.opendaylight.genius.mdsalutil-api:0.4.0.SNAPSHOT]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
	at java.lang.Thread.run(Thread.java:748) [?:?]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This also happens in the update path:&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-03-06T05:23:55,042 | INFO  | org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | TunnelInterfaceStateListener     | 367 - org.opendaylight.netvirt.vpnmanager-impl - 0.6.0.SNAPSHOT | handleTunnelEventForDPN: Tunnel ADD event received for Dpn 110780754426209 VTEP Ip 10.30.170.87 destTepIp
2018-03-06T05:23:55,043 | ERROR | org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-DataTreeChangeHandler-0 | TunnelInterfaceStateListener     | 367 - org.opendaylight.netvirt.vpnmanager-impl - 0.6.0.SNAPSHOT | handleTunnelEventForDpn: Unable to handle the tunnel event for srcDpnId 110780754426209 srcTepIp 10.30.170.87 remoteDpnId 106567621600656 destTepIp 10.30.170.102
java.lang.NullPointerException: null
	at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.handleTunnelEventForDPN(TunnelInterfaceStateListener.java:340) [367:org.opendaylight.netvirt.vpnmanager-impl:0.6.0.SNAPSHOT]
	at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.update(TunnelInterfaceStateListener.java:169) [367:org.opendaylight.netvirt.vpnmanager-impl:0.6.0.SNAPSHOT]
	at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.update(TunnelInterfaceStateListener.java:76) [367:org.opendaylight.netvirt.vpnmanager-impl:0.6.0.SNAPSHOT]
	at org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run(AsyncDataTreeChangeListenerBase.java:172) [260:org.opendaylight.genius.mdsalutil-api:0.4.0.SNAPSHOT]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
	at java.lang.Thread.run(Thread.java:748) [?:?]&lt;/pre&gt;
&lt;/div&gt;&lt;/div&gt;</description>
                <environment></environment>
        <key id="29351">NETVIRT-1132</key>
            <summary>NPE: StateTunnelList_ADTCL handleTunnelEventForDpn: Unable to handle the tunnel event for srcDpnId 110780754426209 srcTepIp 10.30.170.87 remoteDpnId 106567621600656 destTepIp 10.30.170.102 handleTunnelEventForDPN(TunnelInterfaceStateListener.java:340)</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="vpickard">Victor Pickard</assignee>
                                    <reporter username="shague">Sam Hague</reporter>
                        <labels>
                            <label>csit:exception</label>
                            <label>patch_merged</label>
                    </labels>
                <created>Tue, 6 Mar 2018 14:30:02 +0000</created>
                <updated>Tue, 13 Mar 2018 19:42:03 +0000</updated>
                            <resolved>Tue, 13 Mar 2018 19:42:03 +0000</resolved>
                                    <version>Oxygen</version>
                                    <fixVersion>Oxygen</fixVersion>
                                    <component>General</component>
                        <due></due>
                            <votes>0</votes>
                                    <watches>2</watches>
                                                                                                                <comments>
                            <comment id="61558" author="vpickard" created="Thu, 8 Mar 2018 14:44:50 +0000"  >&lt;p&gt;OK, here are my observations from looking into this exception. Sam, thanks for forwarding the email thread about neutron creating initial networks being enabled. That was a good clue to help narrow down this issue.&lt;br/&gt;
&#160;&lt;br/&gt;
Here is the sandbox job &lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt; I ran with extra debug to get the interface name that was not found in config d/s that was causing the exception.&lt;br/&gt;
&#160;&lt;br/&gt;
&#160;&lt;br/&gt;
*+Why is the interface ad7be255-1fc2-4bab-93e1-9641504c27fb not found in config d/s?&#160;&lt;br/&gt;
+*&#160;&lt;br/&gt;
TunnelInterfaceStateListener::handleTunnelEventForDPN makes a call to genius InterfaceManager::getDpnInterfaceList(), which returns interfaces from OPERATIONAL d/s, NOT config d/s.&#160;&lt;/p&gt;

&lt;p&gt;It appears that this port was never added to config d/s..... perhaps because neutron create initial networks was enabled??&#160;&lt;/p&gt;

&lt;p&gt;So, we get a list of interfaces from genius from oper d/s, and then look for the interface (netvirt) in config d/s, and it is not there. This doesn&apos;t seem correct, should genius be returning interfaces from config d/s? I suppose a more general question, how can a port end up in oper d/s and not be in config d/s? Is it because neutron created the port before ODL was up, and did not receive the neutron port create event? Probably so.....&#160;&lt;br/&gt;
&#160;&lt;br/&gt;
&#160;&lt;br/&gt;
&lt;b&gt;&lt;ins&gt;Debugging details&lt;/ins&gt;&lt;/b&gt;&lt;br/&gt;
&#160;&lt;/p&gt;



&lt;p&gt;&lt;b&gt;&lt;ins&gt;Interface that is not found in config d/s ad7be255-1fc2-4bab-93e1-9641504c27fb&lt;/ins&gt;&lt;/b&gt;&#160;&lt;br/&gt;
&lt;font color=&quot;#000000&quot;&gt;&lt;/font&gt;2018-03-07T20:34:26,183 | INFO &#160;| org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-Data&lt;br/&gt;
TreeChangeHandler-0 | TunnelInterfaceStateListener &#160;&#160;&#160;&#160;| 364 - org.opendaylight.netvirt.vpnmanager-impl - 0.7.0.SNAPSHOT | handleTunnelEventForDPN: Processing Interface n&lt;br/&gt;
ame ad7be255-1fc2-4bab-93e1-9641504c27fb, Interface Interfaces [_interfaceName=ad7be255-1fc2-4bab-93e1-9641504c27fb, _interfaceType=class org.opendaylight.yang.gen.v1.urn&lt;br/&gt;
.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan, augmentation=[]]&lt;/p&gt;

&lt;p&gt;2018-03-07T20:34:26,183 | ERROR | org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList_AsyncDataTreeChangeListenerBase-Data&lt;br/&gt;
TreeChangeHandler-0 | TunnelInterfaceStateListener &#160;&#160;&#160;&#160;| 364 - org.opendaylight.netvirt.vpnmanager-impl - 0.7.0.SNAPSHOT | handleTunnelEventForDpn: Unable to handle the t&lt;br/&gt;
unnel event for srcDpnId 277980448198840 srcTepIp 10.30.170.83 remoteDpnId 154421049938961 destTepIp 10.30.170.96&#160;&lt;br/&gt;
java.lang.NullPointerException: null&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.handleTunnelEventForDPN(TunnelInterfaceStateListener.java:343) [364:org.opendaylight.netvirt.v&lt;br/&gt;
pnmanager-impl:0.7.0.SNAPSHOT]&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.add(TunnelInterfaceStateListener.java:219) [364:org.opendaylight.netvirt.vpnmanager-impl:0.7.0&lt;br/&gt;
.SNAPSHOT]&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at org.opendaylight.netvirt.vpnmanager.TunnelInterfaceStateListener.add(TunnelInterfaceStateListener.java:76) [364:org.opendaylight.netvirt.vpnmanager-impl:0.7.0.&lt;br/&gt;
SNAPSHOT]&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at org.opendaylight.genius.datastoreutils.AsyncDataTreeChangeListenerBase$DataTreeChangeHandler.run(AsyncDataTreeChangeListenerBase.java:167) [258:org.opendayligh&lt;br/&gt;
t.genius.mdsalutil-api:0.5.0.SNAPSHOT]&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) &lt;span class=&quot;error&quot;&gt;&amp;#91;?:?&amp;#93;&lt;/span&gt;&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) &lt;span class=&quot;error&quot;&gt;&amp;#91;?:?&amp;#93;&lt;/span&gt;&#160;&lt;br/&gt;
&#160;&#160;&#160;&#160;&#160;&#160;&#160;at java.lang.Thread.run(Thread.java:748) &lt;span class=&quot;error&quot;&gt;&amp;#91;?:?&amp;#93;&lt;/span&gt;&#160;&lt;br/&gt;
&#160;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;ins&gt;1st robot test... exception comes out even before 1st test starts... is this related to neutron creating initial networks?&lt;/ins&gt;&lt;/b&gt;&#160;&lt;br/&gt;
2018-03-07T20:40:17,258 | INFO &#160;| pipe-log:log &quot;ROBOT MESSAGE: Starting suite /w/workspace/netvirt-csit-1node-openstack-queens-vic-upstream-stateful-fluorine/test/csit/su&lt;br/&gt;
ites/openstack/connectivity/l2.robot&quot; | core &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;| 123 - org.apache.karaf.log.core - 4.1.3 | ROBOT MESSAGE: Starting suite /w/workspace/netvirt-cs&lt;br/&gt;
it-1node-openstack-queens-vic-upstream-stateful-fluorine/test/csit/suites/openstack/connectivity/l2.robot&#160;&lt;br/&gt;
2018-03-07T20:40:27,363 | INFO &#160;| pipe-log:log &quot;ROBOT MESSAGE: Starting suite /w/workspace/netvirt-csit-1node-openstack-queens-vic-upstream-stateful-fluorine/test/csit/su&lt;br/&gt;
ites/openstack/connectivity/l2.robot&quot; | core &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;| 123 - org.apache.karaf.log.core - 4.1.3 | ROBOT MESSAGE: Starting test Create VLAN Network net_&lt;br/&gt;
1&#160;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;&lt;ins&gt;When is the interface ad7be255-1fc2-4bab-93e1-9641504c27fb created?&lt;/ins&gt;&lt;/b&gt;&#160;&lt;/p&gt;

&lt;p&gt;2018-03-07T20:34:05,041 | INFO &#160;| ForkJoinPool-1-worker-6 | NeutronPortChangeListener &#160;&#160;&#160;&#160;&#160;&#160;&#160;| 356 - org.opendaylight.netvirt.neutronvpn-impl - 0.7.0.SNAPSHOT | Of-port-interface creation for port ad7be255-1fc2-4bab-93e1-9641504c27fb&#160;&lt;/p&gt;

&lt;p&gt;Port created a good 6+ minutes before any robot csit tests start...&#160;&lt;/p&gt;

&lt;p&gt;2018-03-07T20:34:06,719 | INFO &#160;| org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port_AsyncClusteredDataTreeChangeListenerBa&lt;br/&gt;
se-DataTreeChangeHandler-0 | NeutronPortChangeListener &#160;&#160;&#160;&#160;&#160;&#160;&#160;| 350 - org.opendaylight.netvirt.ipv6service-impl - 0.7.0.SNAPSHOT | IPv6: addInterfaceInfo is invoked for ahost interface Port{getAllowedAddressPairs=[], getDeviceId=dhcpe5510a36-5d54-52f9-9732-333c3a36fa80-0e1251ed-f2a1-42b9-940e-1c0f5341e75d, getDeviceOwner=network:dhcp, getExtraDhcpOpts=[], getFixedIps=[FixedIps{getIpAddress=IpAddress [_ipv4Address=Ipv4Address &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=10.0.0.2&amp;#93;&lt;/span&gt;], getSubnetId=Uuid [_value=b8b43068-d1cd-49b6-88f0-9c6db910d37&lt;br/&gt;
5], augmentations={}}, FixedIps{getIpAddress=IpAddress [_ipv6Address=Ipv6Address &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=fd12:5ac9:f253:0:f816:3eff:fe6e:aa7d&amp;#93;&lt;/span&gt;], getSubnetId=Uuid &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=c2b3a176-3742-45a5-ba3d-7302d0ddf2b7&amp;#93;&lt;/span&gt;, augmentations={}}], getMacAddress=MacAddress &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=fa:16:3e:6e:aa:7d&amp;#93;&lt;/span&gt;, getName=, getNetworkId=Uuid &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=0e1251ed-f2a1-42b9-940e-1c0f5341e75d&amp;#93;&lt;/span&gt;,&lt;br/&gt;
getRevisionNumber=7, getSecurityGroups=[], getTenantId=Uuid &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=b76b365c-9351-482f-9f5c-beb8570e29a4&amp;#93;&lt;/span&gt;, getUuid=Uuid &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=ad7be255-1fc2-4bab-93e1-9641504c27fb&amp;#93;&lt;/span&gt;, isAdminStateUp=true, augmentations={interfaceorg.opendaylight.yang.gen.v1.urn.opendaylight.neutron.portsecurity.rev150712.PortSecurityExtension=PortSecurityExtension&lt;/p&gt;
{isPor
tSecurityEnabled=false}
&lt;p&gt;,interfaceorg.opendaylight.yang.gen.v1.urn.opendaylight.neutron.binding.rev150712.PortBindingExtension=PortBindingExtension{getHostId=&lt;a href=&quot;http://sandbox-31488-4-1-devstack-pike-0.vexxhost.net/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;sandbox-31488-4-1-devstack-pike-0.vexxhost.net&lt;/a&gt;, getProfile={}, getVifDetails=&lt;span class=&quot;error&quot;&gt;&amp;#91;VifDetails\{getDetailsKey=support_vhost_user, getValue=false, augmentations={}}, VifDetails\{getDetailsKey=uuid, getValue=46f51f05-7822-4af1-a99d-03e0f03cdd59, augmentations={}}, VifDetails\{getDetailsKey=has_datapath_type_netdev, getValue=false, augmentations={}}&amp;#93;&lt;/span&gt;, getVifTyp&lt;br/&gt;
e=ovs, getVnicType=normal}}}, fixedIp: FixedIps{getIpAddress=IpAddress [_ipv6Address=Ipv6Address &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=fd12:5ac9:f253:0:f816:3eff:fe6e:aa7d&amp;#93;&lt;/span&gt;], getSubnetId=Uuid &lt;span class=&quot;error&quot;&gt;&amp;#91;_value=c2b3a176-3742-45a5-ba3d-7302d0ddf2b7&amp;#93;&lt;/span&gt;, augmentations={}}&lt;/p&gt;


&lt;p&gt;&lt;b&gt;&lt;ins&gt;Robot L2 suite runs. Openstack Suite setup cleans up, and removes the port&lt;/ins&gt;&lt;/b&gt;&#160;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://logs.opendaylight.org/sandbox/vex-yul-odl-jenkins-2/netvirt-csit-1node-openstack-queens-vic-upstream-stateful-fluorine/4/robot-plugin/log_01_l2.html.gz#s1-k2-k1-k&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://logs.opendaylight.org/sandbox/vex-yul-odl-jenkins-2/netvirt-csit-1node-openstack-queens-vic-upstream-stateful-fluorine/4/robot-plugin/log_01_l2.html.gz#s1-k2-k1-k&lt;/a&gt;&lt;br/&gt;
7-k4&#160;&lt;/p&gt;


&lt;p&gt;KEYWORD BuiltIn . Log ${list}&#160;&lt;br/&gt;
Documentation:&#160;&lt;br/&gt;
Logs the given message with the given level.&#160;&lt;/p&gt;

&lt;p&gt;Start / End / Elapsed: &#160;20180307 15:47:06.683 / 20180307 15:47:06.684 / 00:00:00.001&#160;&lt;br/&gt;
15:47:06.684 &#160;&#160;&#160;INFO &#160;&#160;&#160;[&lt;/p&gt;
{u&apos;Status&apos;: u&apos;ACTIVE&apos;, u&apos;Fixed IP Addresses&apos;: u&quot;ip_address=&apos;10.0.0.2&apos;, subnet_id=&apos;b8b43068-d1cd-49b6-88f0-9c6db910d375&apos;\nip_address=&apos;fd12:5ac9:f2
53:0:f816:3eff:fe6e:aa7d&apos;, subnet_id=&apos;c2b3a176-3742-45a5-ba3d-7302d0ddf2b7&apos;&quot;, u&apos;ID&apos;: u&apos;ad7be255-1fc2-4bab-93e1-9641504c27fb&apos;, u&apos;MAC Address&apos;: u&apos;fa:16:3e:6e:aa:7d&apos;, u&apos;Name
&apos;: u&apos;&apos;}
&lt;p&gt;]&#160;&lt;/p&gt;


&lt;p&gt;Start / End / Elapsed: &#160;20180307 15:47:06.708 / 20180307 15:47:08.388 / 00:00:01.680&#160;&lt;br/&gt;
15:47:06.710 &#160;&#160;&#160;INFO &#160;&#160;&#160;Running command &apos;openstack port delete ad7be255-1fc2-4bab-93e1-9641504c27fb 2&amp;gt;&amp;amp;1&apos;.&lt;br/&gt;
&#160;&lt;br/&gt;
&#160;&lt;br/&gt;
&lt;span class=&quot;error&quot;&gt;&amp;#91;1&amp;#93;&lt;/span&gt;&#160;&lt;a href=&quot;https://logs.opendaylight.org/sandbox/vex-yul-odl-jenkins-2/netvirt-csit-1node-openstack-queens-vic-upstream-stateful-fluorine/4/odl_1/odl1_karaf.log.gz&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://logs.opendaylight.org/sandbox/vex-yul-odl-jenkins-2/netvirt-csit-1node-openstack-queens-vic-upstream-stateful-fluorine/4/odl_1/odl1_karaf.log.gz&lt;/a&gt;&lt;br/&gt;
&#160;&lt;/p&gt;</comment>
                            <comment id="61690" author="vpickard" created="Mon, 12 Mar 2018 18:12:51 +0000"  >&lt;p&gt;OK, the previous analysis was incorrect. Here is the latest update, thanks for helping with this Michael/Stephen/Sam!&lt;/p&gt;

&lt;p&gt;&#160;&lt;/p&gt;

&lt;p&gt;&#160;&lt;br/&gt;
Victor,&lt;br/&gt;
&#160;&lt;br/&gt;
as discussed today on #opendaylight-netvirt, and with full due credit to Sam and Stephen, &quot;here&apos;s what happened&quot;, as Mr. Monk would say:&lt;br/&gt;
&#160;&lt;br/&gt;
&#160;&lt;br/&gt;
The NPE at line 343 of&#160;netvirt.vpnmanager.TunnelInterfaceStateListener (that&apos;s &lt;b&gt;WITH&lt;/b&gt; your&#160;&lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/69222/2/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/69222/2/vpnmanager/impl/src/main/java/org/opendaylight/netvirt/vpnmanager/TunnelInterfaceStateListener.java&lt;/a&gt;; on master that is 341, this caused me a bit of confusion initially) in this line:&lt;br/&gt;
&#160;&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; if (vpnInterface != null &amp;amp;&amp;amp; !vpnInterface.isScheduledForRemove()) {&lt;br/&gt;
&#160;&lt;br/&gt;
is caused by&#160;Boolean isScheduledForRemove() - note the object Boolean instead of the primitive boolean. It&apos;s because of what&apos;s called &quot;auto boxing&quot; in Java, and not that obvious to spot... basically a boolean can be (only) true or false but a Boolean can that OR null, and in an if (theBoolean) you can get an NPE wherever it has to get &quot;coerced&quot; to a boolean (like in an if, but e.g. !vpnInterface.isScheduledForRemove() etc. could cause it as well).&lt;br/&gt;
&#160;&lt;br/&gt;
A trivial fix could be to just change that to this, as suggested by Stephen:&lt;br/&gt;
&#160;&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; if (vpnInterface != null &amp;amp;&amp;amp; !Boolean.TRUE.equals(vpnInterface.isScheduledForRemove())) {&lt;br/&gt;
&#160;&lt;br/&gt;
which, just for illustration basicaly just does this:&lt;br/&gt;
&#160;&lt;br/&gt;
&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160;&#160;if (vpnInterface != null &amp;amp;&amp;amp; vpnInterface.isScheduledForRemove() != null &amp;amp;&amp;amp; !vpnInterface.isScheduledForRemove()) {&lt;br/&gt;
&#160;&lt;br/&gt;
BUT I would question whether it&apos;s expected to get null in there - whever that vpnInterface was created, is there a setScheduledForRemove() call missing on a VpnInterfaceBuilder somewhere?&#160;in the YANG model for this, should the scheduledForRemove perhaps default to false? Or we would you&#8217;d need to add &#8220;mandatory&#8221; to the YANG model?&lt;br/&gt;
&#160;&lt;br/&gt;
Another angle would be to do something on the code quality metrics side of things to see if we could fail on unchecked possible Boolean usage as boolean. I&apos;m not sure if such a check already exists, but will have a look.&lt;br/&gt;
&#160;&lt;/p&gt;</comment>
                            <comment id="61691" author="vpickard" created="Mon, 12 Mar 2018 18:13:13 +0000"  >&lt;p&gt;Michael/Stephen/Sam,&lt;br/&gt;
Thanks for taking a look at this NPE and providing the details, especially the explanation about &quot;auto boxing&quot;, I clearly didn&apos;t see it in the code, your analysis is much appreciated.&lt;/p&gt;

&lt;p&gt;As Sam noted in #opendaylight-netvirt, this vpnInterface.isScheduledForRemove() came in a recent patch, &lt;a href=&quot;https://git.opendaylight.org/gerrit/#/c/68151/&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/#/c/68151/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I have pushed a patch &lt;span class=&quot;error&quot;&gt;&amp;#91;0&amp;#93;&lt;/span&gt; that makes the call to setScheduledForRemove() on the VpnInterface when it is created for all references, and also, added the extra null check as suggested by Stephen in TunnelInterfaceStateListener.java.&lt;/p&gt;

&lt;p&gt;I&apos;ll add Kiran and Phillipe to the review.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;error&quot;&gt;&amp;#91;0&amp;#93;&lt;/span&gt; &lt;a href=&quot;https://git.opendaylight.org/gerrit/69398&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/69398&lt;/a&gt;&lt;/p&gt;</comment>
                            <comment id="61722" author="shague@redhat.com" created="Tue, 13 Mar 2018 13:47:29 +0000"  >&lt;p&gt;&lt;a href=&quot;https://git.opendaylight.org/gerrit/69398&quot; class=&quot;external-link&quot; target=&quot;_blank&quot; rel=&quot;nofollow noopener&quot;&gt;https://git.opendaylight.org/gerrit/69398&lt;/a&gt;&lt;/p&gt;</comment>
                    </comments>
                    <attachments>
                            <attachment id="14450" name="odl_karaf.log.tar.xz" size="627172" author="shague" created="Tue, 6 Mar 2018 14:29:10 +0000"/>
                    </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_10000" key="com.pyxis.greenhopper.jira:gh-lexo-rank">
                        <customfieldname>Rank</customfieldname>
                        <customfieldvalues>
                            <customfieldvalue>0|i03b87:</customfieldvalue>

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