Bug 6758: Remove inter-VPN link state even if error 90/45890/6
authorAlvaro Gonzalez ARROYO <alvaro.gonzalez.arroyo@ericsson.com>
Tue, 20 Sep 2016 13:21:48 +0000 (15:21 +0200)
committerSam Hague <shague@redhat.com>
Mon, 3 Oct 2016 20:27:55 +0000 (20:27 +0000)
When an inter-VPN link in error state is removed, the
inter-VPN link is removed from MDSAL but not the state.
The bug was due because, when the state is error, it has
not any attribute with the endpoint states.

Change-Id: Ic8324c6ed5a5b5b3cf9a65694aff7ff137f3ae40
Signed-off-by: Alvaro Gonzalez ARROYO <alvaro.gonzalez.arroyo@ericsson.com>
vpnservice/vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/netvirt/vpnmanager/intervpnlink/InterVpnLinkListener.java [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 6ac8d84..49ce2f8
@@ -323,16 +323,26 @@ public class InterVpnLinkListener extends AbstractDataChangeListener<InterVpnLin
         Optional<InterVpnLinkState> optIVpnLinkState = InterVpnLinkUtil.getInterVpnLinkState(dataBroker, del.getName());
         if ( optIVpnLinkState.isPresent() ) {
             InterVpnLinkState interVpnLinkState = optIVpnLinkState.get();
-            Long firstEndpointLportTag = interVpnLinkState.getFirstEndpointState().getLportTag();
-            Long secondEndpointLportTag = interVpnLinkState.getSecondEndpointState().getLportTag();
-            removeVpnLinkEndpointFlows(del.getName(), rd1, vpn1Uuid,
-                    interVpnLinkState.getFirstEndpointState().getDpId(),
-                    secondEndpointLportTag.intValue(),
-                    del.getSecondEndpoint().getIpAddress().getValue());
-            removeVpnLinkEndpointFlows(del.getName(), rd2, vpn2Uuid,
-                    interVpnLinkState.getSecondEndpointState().getDpId(),
-                    firstEndpointLportTag.intValue(),
-                    del.getFirstEndpoint().getIpAddress().getValue());
+            if ( interVpnLinkState.getFirstEndpointState() != null ) {
+                Long firstEndpointLportTag = interVpnLinkState.getFirstEndpointState().getLportTag();
+                removeVpnLinkEndpointFlows(del.getName(), rd2, vpn2Uuid,
+                                           interVpnLinkState.getSecondEndpointState().getDpId(),
+                                           firstEndpointLportTag.intValue(),
+                                           del.getFirstEndpoint().getIpAddress().getValue());
+            }
+            else {
+                LOG.info("Could not get first endpoint state attributes for InterVpnLink {}", del.getName());
+            }
+            if ( interVpnLinkState.getSecondEndpointState() != null ) {
+                Long secondEndpointLportTag = interVpnLinkState.getSecondEndpointState().getLportTag();
+                removeVpnLinkEndpointFlows(del.getName(), rd1, vpn1Uuid,
+                                           interVpnLinkState.getFirstEndpointState().getDpId(),
+                                           secondEndpointLportTag.intValue(),
+                                           del.getSecondEndpoint().getIpAddress().getValue());
+            }
+            else {
+                LOG.info("Could not get second endpoint state attributes for InterVpnLink {}", del.getName());
+            }
         }
 
         // Release idManager with LPortTag associated to endpoints