Purge internal map variables by leveraging persistent store

Change-Id: If347de18803a6f84a220e1ffdee26b9e1c28634b
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 5be8b87..2c20f6a 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
@@ -140,7 +140,6 @@
     private final InstancePortListener instPortListener = new InternalInstancePortListener();
 
     private Map<String, Port> terminatedOsPorts = Maps.newConcurrentMap();
-    private Map<String, NetFloatingIP> pendingInstPortIds = Maps.newConcurrentMap();
 
     private ApplicationId appId;
     private NodeId localNodeId;
@@ -606,9 +605,6 @@
         if (!Strings.isNullOrEmpty(osPort.getDeviceId())) {
 
             if (instancePortService.instancePort(osPort.getId()) == null) {
-                log.info("Try to associate the fip {} with a terminated VM",
-                        osFip.getFloatingIpAddress());
-                pendingInstPortIds.put(osPort.getId(), osFip);
                 return;
             }
 
@@ -634,15 +630,7 @@
         if (!Strings.isNullOrEmpty(osPort.getDeviceId())) {
 
             if (instancePortService.instancePort(osPort.getId()) == null) {
-
-                // in case there is pending instance port, we simply remove that
-                // port, otherwise, we directly go with rule removal
-                if (pendingInstPortIds.containsKey(osPort.getId())) {
-                    log.info("Try to disassociate the fip {} with a terminated VM",
-                            osFip.getFloatingIpAddress());
-                    pendingInstPortIds.remove(osPort.getId());
-                    return;
-                }
+                return;
             }
 
             setFloatingIpRules(osFip, osPort, null, false);
@@ -742,12 +730,7 @@
                                 continue;
                             }
 
-                            // Note that, at OPENSTACK_INSTANCE_PORT_DETECTED phase,
-                            // we will install floating IP related rules by
-                            // referring to the key and value stored in pending map
-                            if (!Strings.isNullOrEmpty(osPort.getDeviceId()) &&
-                                    instancePortService.instancePort(fip.getPortId()) == null) {
-                                pendingInstPortIds.put(fip.getPortId(), fip);
+                            if (instancePortService.instancePort(fip.getPortId()) == null) {
                                 continue;
                             }
 
@@ -848,11 +831,10 @@
 
                         Port port = osNetworkService.port(portId);
 
-                        if (pendingInstPortIds.containsKey(portId) && port != null) {
-                            setFloatingIpRules(pendingInstPortIds.get(portId),
-                                    port, null, true);
-                            pendingInstPortIds.remove(portId);
-                        }
+                        osRouterAdminService.floatingIps().stream()
+                                .filter(f -> f.getPortId() != null)
+                                .filter(f -> f.getPortId().equals(instPort.portId()))
+                                .forEach(f -> setFloatingIpRules(f, port, null, true));
                     }
 
                     break;