Purge internal map variables by leveraging persistent store
Change-Id: If347de18803a6f84a220e1ffdee26b9e1c28634b
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 1f73566..f1440c1 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
@@ -17,7 +17,6 @@
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -69,13 +68,11 @@
import org.openstack4j.model.network.ExternalGateway;
import org.openstack4j.model.network.IP;
import org.openstack4j.model.network.NetFloatingIP;
-import org.openstack4j.model.network.Port;
import org.openstack4j.model.network.Router;
import org.osgi.service.component.ComponentContext;
import org.slf4j.Logger;
import java.nio.ByteBuffer;
-import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ExecutorService;
@@ -158,11 +155,6 @@
private ApplicationId appId;
private NodeId localNodeId;
- private final Map<String, MacAddress> floatingIpMacMap = Maps.newConcurrentMap();
-
- // TODO: pendingInstPortIds should be purged later
- private final Map<String, NetFloatingIP> pendingInstPortIds = Maps.newConcurrentMap();
-
private final ExecutorService eventExecutor = newSingleThreadExecutor(
groupedThreads(this.getClass().getSimpleName(), "event-handler", log));
@@ -336,31 +328,6 @@
.anyMatch(ip -> IpAddress.valueOf(ip.getIpAddress()).equals(targetIp));
}
- private void initFloatingIpMacMap() {
- osRouterService.floatingIps().forEach(f -> {
- if (f.getPortId() != null && f.getFloatingIpAddress() != null) {
- Port port = osNetworkAdminService.port(f.getPortId());
- if (port != null && port.getMacAddress() != null) {
- floatingIpMacMap.put(f.getFloatingIpAddress(),
- MacAddress.valueOf(port.getMacAddress()));
- }
- }
- });
- }
-
- private void initPendingInstPorts() {
- osRouterService.floatingIps().forEach(f -> {
- if (f.getPortId() != null) {
- Port port = osNetworkAdminService.port(f.getPortId());
- if (port != null) {
- if (!Strings.isNullOrEmpty(port.getDeviceId())) {
- pendingInstPortIds.put(f.getPortId(), f);
- }
- }
- }
- });
- }
-
/**
* Installs static ARP rules used in ARP BROAD_CAST mode.
*
@@ -463,24 +430,14 @@
return;
}
- MacAddress targetMac;
- InstancePort instPort;
-
- if (install) {
- if (fip.getPortId() != null) {
- String macString = osNetworkAdminService.port(fip.getPortId()).getMacAddress();
- targetMac = MacAddress.valueOf(macString);
- floatingIpMacMap.put(fip.getFloatingIpAddress(), targetMac);
- } else {
- log.trace("Unknown target ARP request for {}, ignore it",
- fip.getFloatingIpAddress());
- return;
- }
- } else {
- targetMac = floatingIpMacMap.get(fip.getFloatingIpAddress());
+ if (fip.getPortId() == null) {
+ log.trace("Unknown target ARP request for {}, ignore it",
+ fip.getFloatingIpAddress());
+ return;
}
- instPort = instancePortService.instancePort(targetMac);
+ InstancePort instPort = instancePortService.instancePort(fip.getPortId());
+ MacAddress targetMac = instPort.macAddress();
OpenstackNode gw = getGwByInstancePort(gateways, instPort);
@@ -690,13 +647,10 @@
switch (event.type()) {
case OPENSTACK_INSTANCE_PORT_DETECTED:
- if (pendingInstPortIds.containsKey(instPort.portId())) {
- Set<OpenstackNode> completedGws =
- osNodeService.completeNodes(GATEWAY);
- setFloatingIpArpRule(pendingInstPortIds.get(instPort.portId()),
- completedGws, true);
- pendingInstPortIds.remove(instPort.portId());
- }
+ osRouterService.floatingIps().stream()
+ .filter(f -> f.getPortId() != null)
+ .filter(f -> f.getPortId().equals(instPort.portId()))
+ .forEach(f -> setFloatingIpArpRule(f, gateways, true));
break;
case OPENSTACK_INSTANCE_MIGRATION_STARTED:
@@ -759,13 +713,6 @@
case OPENSTACK_NODE_COMPLETE:
setDefaultArpRule(osNode, true);
setFloatingIpArpRuleForGateway(osNode, true);
-
- // initialize FloatingIp to Mac map
- initFloatingIpMacMap();
-
- // initialize pendingInstPorts
- initPendingInstPorts();
-
break;
case OPENSTACK_NODE_INCOMPLETE:
setDefaultArpRule(osNode, false);