Fix: resolve a set of exceptions raised by tempest integration test
Change-Id: I7931f969d93afc28819dff31e2857cfbc6f720ac
diff --git a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
index 9e47a0c..d751c03 100644
--- a/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
+++ b/apps/openstacknetworking/app/src/main/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingArpHandler.java
@@ -15,6 +15,7 @@
*/
package org.onosproject.openstacknetworking.impl;
+import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
@@ -430,6 +431,12 @@
return;
}
+ if (portId == null || fip.getPortId() == null) {
+ log.trace("Unknown target ARP request for {}, ignore it",
+ fip.getFloatingIpAddress());
+ return;
+ }
+
InstancePort instPort = instancePortService.instancePort(portId);
MacAddress targetMac = instPort.macAddress();
@@ -521,40 +528,46 @@
);
break;
case OPENSTACK_FLOATING_IP_ASSOCIATED:
- eventExecutor.execute(() -> {
- NetFloatingIP osFip = event.floatingIp();
-
- // associate a floating IP with an existing VM
- setFloatingIpArpRule(event.floatingIp(), event.portId(), completedGws, true);
- });
+ if (getValidPortId(event) != null) {
+ eventExecutor.execute(() -> {
+ // associate a floating IP with an existing VM
+ setFloatingIpArpRule(event.floatingIp(), getValidPortId(event),
+ completedGws, true);
+ });
+ }
break;
case OPENSTACK_FLOATING_IP_DISASSOCIATED:
- eventExecutor.execute(() -> {
- NetFloatingIP osFip = event.floatingIp();
-
- // associate a floating IP with an existing VM
- setFloatingIpArpRule(event.floatingIp(), event.portId(), completedGws, false);
- });
+ if (getValidPortId(event) != null) {
+ eventExecutor.execute(() -> {
+ // disassociate a floating IP with an existing VM
+ setFloatingIpArpRule(event.floatingIp(), getValidPortId(event),
+ completedGws, false);
+ });
+ }
break;
case OPENSTACK_FLOATING_IP_CREATED:
- eventExecutor.execute(() -> {
- NetFloatingIP osFip = event.floatingIp();
-
- // during floating IP creation, if the floating IP is
- // associated with any port of VM, then we will set
- // floating IP related ARP rules to gateway node
- setFloatingIpArpRule(osFip, event.portId(), completedGws, true);
- });
+ // during floating IP creation, if the floating IP is
+ // associated with any port of VM, then we will set
+ // floating IP related ARP rules to gateway node
+ if (getValidPortId(event) != null) {
+ eventExecutor.execute(() -> {
+ // associate a floating IP with an existing VM
+ setFloatingIpArpRule(event.floatingIp(), getValidPortId(event),
+ completedGws, true);
+ });
+ }
break;
case OPENSTACK_FLOATING_IP_REMOVED:
- eventExecutor.execute(() -> {
- NetFloatingIP osFip = event.floatingIp();
-
- // during floating IP deletion, if the floating IP is
- // still associated with any port of VM, then we will
- // remove floating IP related ARP rules from gateway node
- setFloatingIpArpRule(event.floatingIp(), event.portId(), completedGws, false);
- });
+ // during floating IP deletion, if the floating IP is
+ // still associated with any port of VM, then we will
+ // remove floating IP related ARP rules from gateway node
+ if (getValidPortId(event) != null) {
+ eventExecutor.execute(() -> {
+ // associate a floating IP with an existing VM
+ setFloatingIpArpRule(event.floatingIp(), getValidPortId(event),
+ completedGws, false);
+ });
+ }
break;
default:
// do nothing for the other events
@@ -562,6 +575,21 @@
}
}
+ private String getValidPortId(OpenstackRouterEvent event) {
+ NetFloatingIP osFip = event.floatingIp();
+ String portId = osFip.getPortId();
+
+ if (Strings.isNullOrEmpty(portId)) {
+ portId = event.portId();
+ }
+
+ if (portId != null && instancePortService.instancePort(portId) != null) {
+ return portId;
+ }
+
+ return null;
+ }
+
private Set<IP> getExternalGatewaySnatIps(ExternalGateway extGw) {
return osNetworkAdminService.ports().stream()
.filter(port ->