[ONOS-3788] Update floatingip's bug:according to our logic, when a
floatingip bind a vm, it can not be deleted and return a error status
code to openstack, but openstack do not deal with the error status code
and delete the floatingip, and this lead to APEX'functiontest does not
pass, so we have modified the code logic and allowed to delete the
floatingip which have bind a vm.

Change-Id: I0355fd53ba6235c17ec868b9b48ba906b4d07784
diff --git a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java
index aaefb07..252dcf0 100644
--- a/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java
+++ b/apps/vtn/vtnmgr/src/main/java/org/onosproject/vtn/manager/impl/VTNManager.java
@@ -933,6 +933,7 @@
                         .getL3vni(vmPort.tenantId());
                 // Floating ip BIND
                 if (type == VtnRscEvent.Type.FLOATINGIP_BIND) {
+                    vPortStore.put(fipPort.portId(), fipPort);
                     applyNorthSouthL3Flows(deviceId, host, vmPort, fipPort,
                                            floaingIp, l3vni, exPort,
                                            Objective.Operation.ADD);
@@ -941,6 +942,7 @@
                     applyNorthSouthL3Flows(deviceId, host, vmPort, fipPort,
                                            floaingIp, l3vni, exPort,
                                            Objective.Operation.REMOVE);
+                    vPortStore.remove(fipPort.portId());
                 }
             }
         }
diff --git a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java
index 3902593..e3e52e9 100644
--- a/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java
+++ b/apps/vtn/vtnrsc/src/main/java/org/onosproject/vtnrsc/floatingip/impl/FloatingIpManager.java
@@ -224,11 +224,6 @@
                                                    "FloatingIP ID doesn't exist");
             }
             FloatingIp floatingIp = floatingIpStore.get(floatingIpId);
-            if (floatingIp.portId() != null) {
-                log.debug("The floating Ip is uesd by the port whose identifier is {}",
-                          floatingIp.portId().toString());
-                return false;
-            }
             floatingIpStore.remove(floatingIpId, floatingIp);
             floatingIpBindStore.remove(floatingIpId);
             if (floatingIpStore.containsKey(floatingIpId)) {
@@ -331,6 +326,11 @@
                 notifyListeners(new FloatingIpEvent(
                                                     FloatingIpEvent.Type.FLOATINGIP_DELETE,
                                                     floatingIp));
+                if (floatingIp.portId() != null) {
+                    notifyListeners(new FloatingIpEvent(
+                                                        FloatingIpEvent.Type.FLOATINGIP_UNBIND,
+                                                        floatingIp));
+                }
             }
         }
     }