Fix: do not (dis)associate fip if the inst port is not available
Change-Id: I5c6db075f1a4c6653f45b6bea3c772dfa6392994
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 578e7e4..172dd78 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
@@ -92,6 +92,7 @@
import static org.onosproject.openstacknetworking.util.OpenstackNetworkingUtil.swapStaleLocation;
import static org.onosproject.openstacknetworking.util.RulePopulatorUtil.buildExtension;
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
+import static org.openstack4j.model.network.NetworkType.FLAT;
/**
* Handles OpenStack floating IP events.
@@ -681,7 +682,11 @@
eventExecutor.execute(() -> {
NetFloatingIP osFip = event.floatingIp();
if (!Strings.isNullOrEmpty(osFip.getPortId())) {
- disassociateFloatingIp(osFip, 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());
+ }
}
log.info("Removed floating IP {}", osFip.getFloatingIpAddress());
});
@@ -939,7 +944,8 @@
public boolean isRelevant(OpenstackNetworkEvent event) {
// do not allow to proceed without leadership
NodeId leader = leadershipService.getLeader(appId.name());
- return Objects.equals(localNodeId, leader);
+ return Objects.equals(localNodeId, leader) &&
+ event.subject().getNetworkType() != FLAT;
}
@Override