Fix: remove stale compute node to gateway rules for migration case
Change-Id: Ie11ea8d0593e3bc252d9f274c298a7f5b84783eb
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 731a115..732275c 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
@@ -788,9 +788,9 @@
break;
case OPENSTACK_INSTANCE_MIGRATION_ENDED:
- InstancePort revisedInstPort = swapStaleLocation(event.subject());
+ InstancePort oldInstPort = swapStaleLocation(event.subject());
- fip = associatedFloatingIp(revisedInstPort, ips);
+ fip = associatedFloatingIp(oldInstPort, ips);
if (fip == null) {
return;
@@ -805,7 +805,13 @@
throw new IllegalStateException(errorFormat);
}
- // If we only have one gateway, we simply do not remove any
+ eventExecutor.execute(() -> {
+ // We need to remove the old ComputeNodeToGateway rules from
+ // original compute node
+ setComputeNodeToGatewayHelper(oldInstPort, osNet, gateways, false);
+ });
+
+ // If we only have one gateway, we simply do not remove any
// flow rules from either gateway or compute node
if (gateways.size() == 1) {
return;
@@ -817,7 +823,7 @@
// it has been overwritten at port detention event
// if it is false, we will remove the rules
DeviceId newDeviceId = event.subject().deviceId();
- DeviceId oldDeviceId = revisedInstPort.deviceId();
+ DeviceId oldDeviceId = oldInstPort.deviceId();
OpenstackNode oldGateway = getGwByComputeDevId(gateways, oldDeviceId);
OpenstackNode newGateway = getGwByComputeDevId(gateways, newDeviceId);
@@ -827,15 +833,10 @@
}
eventExecutor.execute(() -> {
-
- // We need to remove the old ComputeNodeToGateway rules from
- // original compute node
- setComputeNodeToGatewayHelper(revisedInstPort, osNet, gateways, false);
-
// Since DownstreamExternal rules should only be placed in
// corresponding gateway node, we need to remove old rule from
// the corresponding gateway node
- setDownstreamExternalRulesHelper(fip, osNet, revisedInstPort,
+ setDownstreamExternalRulesHelper(fip, osNet, oldInstPort,
externalPeerRouter, gateways, false);
});
break;