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) {