Fix: remove the instance port only if osPort remove event is issued
Change-Id: I54c99321eef72d19c04f5849718b0165cef949de
(cherry picked from commit 8a5fb64ed8392a3a46a87517cbaef76992b94090)
diff --git a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java
index 5c44c96..746fe3e 100644
--- a/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java
+++ b/apps/openstacknetworking/api/src/main/java/org/onosproject/openstacknetworking/api/InstancePort.java
@@ -55,6 +55,11 @@
* Signifies that the given instance port has been migrated.
*/
MIGRATED,
+
+ /**
+ * Signifies that the given instance port in the pending status for removal.
+ */
+ REMOVE_PENDING,
}
/**
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 f0c0550..6c3ef24 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
@@ -79,6 +79,7 @@
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_EXTERNAL_FLOATING_ROUTING_RULE;
import static org.onosproject.openstacknetworking.api.Constants.PRIORITY_FLOATING_EXTERNAL;
import static org.onosproject.openstacknetworking.api.Constants.ROUTING_TABLE;
+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.OpenstackNetworkEvent.Type.OPENSTACK_PORT_PRE_REMOVE;
@@ -869,6 +870,9 @@
associatedFloatingIp(instPort, osRouterAdminService.floatingIps());
if (fip != null) {
+
+ instancePortService.updateInstancePort(instPort.updateState(REMOVE_PENDING));
+
eventExecutor.execute(() ->
updateFipStore(instancePortService.instancePort(event.port().getId())));
} else {
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/PreCommitPortManager.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/PreCommitPortManager.java
index e0788fb..2926072 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/PreCommitPortManager.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/PreCommitPortManager.java
@@ -24,6 +24,7 @@
import org.onlab.util.KryoNamespace;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
+import org.onosproject.openstacknetworking.api.InstancePort;
import org.onosproject.openstacknetworking.api.InstancePortAdminService;
import org.onosproject.openstacknetworking.api.OpenstackNetworkEvent;
import org.onosproject.openstacknetworking.api.OpenstackNetworkEvent.Type;
@@ -41,6 +42,7 @@
import java.util.Set;
import static org.onosproject.openstacknetworking.api.Constants.OPENSTACK_NETWORKING_APP_ID;
+import static org.onosproject.openstacknetworking.api.InstancePort.State.REMOVE_PENDING;
import static org.slf4j.LoggerFactory.getLogger;
/**
@@ -125,7 +127,12 @@
});
if (subscriberCountByEventType(portId, eventType) == 0) {
- service.removeInstancePort(portId);
+
+ InstancePort instPort = service.instancePort(portId);
+
+ if (instPort != null && instPort.state() == REMOVE_PENDING) {
+ service.removeInstancePort(portId);
+ }
}
}