Fix: resolve a set of NPEs and WARNs caused by null instance port

Change-Id: I62b1c21cb9fac7d38924e85838a435737664f6c0
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedInstancePortStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedInstancePortStore.java
index e9d2b2f..f48bdc3 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedInstancePortStore.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedInstancePortStore.java
@@ -50,6 +50,7 @@
 import static org.onosproject.openstacknetworking.api.InstancePort.State.INACTIVE;
 import static org.onosproject.openstacknetworking.api.InstancePort.State.MIGRATED;
 import static org.onosproject.openstacknetworking.api.InstancePort.State.MIGRATING;
+import static org.onosproject.openstacknetworking.api.InstancePort.State.REMOVE_PENDING;
 import static org.onosproject.openstacknetworking.api.InstancePortEvent.Type.OPENSTACK_INSTANCE_MIGRATION_ENDED;
 import static org.onosproject.openstacknetworking.api.InstancePortEvent.Type.OPENSTACK_INSTANCE_MIGRATION_STARTED;
 import static org.onosproject.openstacknetworking.api.InstancePortEvent.Type.OPENSTACK_INSTANCE_PORT_DETECTED;
@@ -224,6 +225,11 @@
                 return;
             }
 
+            // we do not trigger instance port update for pending state transition
+            if (newState == REMOVE_PENDING) {
+                return;
+            }
+
             notifyDelegate(new InstancePortEvent(
                     OPENSTACK_INSTANCE_PORT_UPDATED,
                     event.newValue().value()));
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
index bea2a00..d16647c 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/DistributedOpenstackRouterStore.java
@@ -321,7 +321,8 @@
         }
     }
 
-    private class OpenstackRouterInterfaceMapListener implements MapEventListener<String, RouterInterface> {
+    private class OpenstackRouterInterfaceMapListener
+                        implements MapEventListener<String, RouterInterface> {
 
         @Override
         public void event(MapEvent<String, RouterInterface> event) {
@@ -360,7 +361,8 @@
         }
     }
 
-    private class OpenstackFloatingIpMapListener implements MapEventListener<String, NetFloatingIP> {
+    private class OpenstackFloatingIpMapListener
+                            implements MapEventListener<String, NetFloatingIP> {
 
         @Override
         public void event(MapEvent<String, NetFloatingIP> event) {
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
index 476db2b..8d346a9 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/InstancePortManager.java
@@ -331,6 +331,16 @@
                     }
                     break;
                 case HOST_REMOVED:
+
+                    // in case the instance port cannot be found in the store,
+                    // this indicates that the instance port was removed due to
+                    // the removal of openstack port; in some cases, openstack
+                    // port removal message arrives before ovs port removal message
+                    if (instancePortStore.instancePort(instPort.portId()) == null) {
+                        log.debug("instance port was removed before ovs port removal");
+                        break;
+                    }
+
                     // we will remove instance port from persistent store,
                     // only if we receive port removal signal from neutron.
                     // by default, we update the instance port state to INACTIVE
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
index 6c3ef24..8a59d36 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingFloatingIpHandler.java
@@ -569,23 +569,31 @@
                 case OPENSTACK_FLOATING_IP_ASSOCIATED:
                     eventExecutor.execute(() -> {
                         NetFloatingIP osFip = event.floatingIp();
-                        associateFloatingIp(osFip);
-                        log.info("Associated floating IP {}:{}",
-                                osFip.getFloatingIpAddress(), osFip.getFixedIpAddress());
+                        if (instancePortService.instancePort(osFip.getPortId()) != null) {
+                            associateFloatingIp(osFip);
+                            log.info("Associated floating IP {}:{}",
+                                    osFip.getFloatingIpAddress(),
+                                    osFip.getFixedIpAddress());
+                        }
                     });
                     break;
                 case OPENSTACK_FLOATING_IP_DISASSOCIATED:
                     eventExecutor.execute(() -> {
                         NetFloatingIP osFip = event.floatingIp();
-                        disassociateFloatingIp(osFip, event.portId());
-                        log.info("Disassociated floating IP {}:{}",
-                                osFip.getFloatingIpAddress(), osFip.getFixedIpAddress());
+                        if (instancePortService.instancePort(event.portId()) != null) {
+                            disassociateFloatingIp(osFip, event.portId());
+                            log.info("Disassociated floating IP {}:{}",
+                                    osFip.getFloatingIpAddress(),
+                                    osFip.getFixedIpAddress());
+                        }
                     });
                     break;
                 case OPENSTACK_FLOATING_IP_CREATED:
                     eventExecutor.execute(() -> {
                         NetFloatingIP osFip = event.floatingIp();
-                        if (!Strings.isNullOrEmpty(osFip.getPortId())) {
+                        String portId = osFip.getPortId();
+                        if (!Strings.isNullOrEmpty(portId) &&
+                                instancePortService.instancePort(portId) != null) {
                             associateFloatingIp(event.floatingIp());
                         }
                         log.info("Created floating IP {}", osFip.getFloatingIpAddress());
@@ -594,11 +602,13 @@
                 case OPENSTACK_FLOATING_IP_REMOVED:
                     eventExecutor.execute(() -> {
                         NetFloatingIP osFip = event.floatingIp();
+                        String portId = osFip.getPortId();
                         if (!Strings.isNullOrEmpty(osFip.getPortId())) {
                             // in case the floating IP is not associated with any port due to
                             // port removal, we simply do not execute floating IP disassociation
-                            if (osNetworkService.port(osFip.getPortId()) != null) {
-                                disassociateFloatingIp(osFip, osFip.getPortId());
+                            if (osNetworkService.port(portId) != null &&
+                                    instancePortService.instancePort(portId) != null) {
+                                disassociateFloatingIp(osFip, portId);
                             }
 
                             // since we skip floating IP disassociation, we need to
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
index 01711e9..55f9c45 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackSecurityGroupHandler.java
@@ -835,7 +835,7 @@
                         try {
                             if (useSecurityGroup) {
                                 initializeConnTrackTable(osNode.intgBridge(), true);
-                                log.warn("SG table initialization : {} is done",
+                                log.info("SG table initialization : {} is done",
                                                             osNode.intgBridge());
                             }
                         } catch (IllegalArgumentException e) {