[ONOS-3364] Update the bug: when neutron delete port and VTNManager
monitor the event, get the port information which is null.

Change-Id: I844b24e3a1d3a8aba621f63bc1d17fdbad783929
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 2e38251..be6b936 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
@@ -81,6 +81,11 @@
 import org.onosproject.vtn.util.DataPathIdGenerator;
 import org.onosproject.vtn.util.VtnConfig;
 import org.onosproject.vtn.util.VtnData;
+import org.onosproject.vtnrsc.AllowedAddressPair;
+import org.onosproject.vtnrsc.BindingHostId;
+import org.onosproject.vtnrsc.DefaultVirtualPort;
+import org.onosproject.vtnrsc.FixedIp;
+import org.onosproject.vtnrsc.SecurityGroup;
 import org.onosproject.vtnrsc.SegmentationId;
 import org.onosproject.vtnrsc.SubnetId;
 import org.onosproject.vtnrsc.TenantId;
@@ -148,10 +153,12 @@
     private static final String CONTROLLER_IP_KEY = "ipaddress";
     public static final String DRIVER_NAME = "onosfw";
     private static final String EX_PORT_NAME = "eth0";
+    private static final String VIRTUALPORT = "vtn-virtual-port";
     private static final String SWITCHES_OF_CONTROLLER = "switchesOfController";
     private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts";
     private static final String DEFAULT_IP = "0.0.0.0";
 
+    private EventuallyConsistentMap<VirtualPortId, VirtualPort> vPortStore;
     private EventuallyConsistentMap<IpAddress, Boolean> switchesOfController;
     private EventuallyConsistentMap<DeviceId, NetworkOfLocalHostPorts> switchOfLocalHostPorts;
 
@@ -171,7 +178,21 @@
                                 .register(Host.class)
                                 .register(TenantNetwork.class)
                                 .register(TenantId.class)
-                                .register(SubnetId.class);
+                                .register(SubnetId.class)
+                                .register(VirtualPortId.class)
+                                .register(VirtualPort.State.class)
+                                .register(AllowedAddressPair.class)
+                                .register(FixedIp.class)
+                                .register(BindingHostId.class)
+                                .register(SecurityGroup.class)
+                                .register(IpAddress.class)
+                                .register(DefaultVirtualPort.class);
+
+        vPortStore = storageService
+                .<VirtualPortId, VirtualPort>eventuallyConsistentMapBuilder()
+                .withName(VIRTUALPORT).withSerializer(serializer)
+                .withTimestampProvider((k, v) -> clockService.getTimestamp())
+                .build();
 
         switchesOfController = storageService
                 .<IpAddress, Boolean>eventuallyConsistentMapBuilder()
@@ -355,8 +376,7 @@
         VirtualPortId virtualPortId = VirtualPortId.portId(ifaceId);
         VirtualPort virtualPort = virtualPortService.getPort(virtualPortId);
         if (virtualPort == null) {
-            log.error("The virtualPort of host is null");
-            return;
+            virtualPort = vPortStore.get(virtualPortId);
         }
 
         Iterable<Device> devices = deviceService.getAvailableDevices();
@@ -383,6 +403,7 @@
         }
 
         if (type == Objective.Operation.ADD) {
+            vPortStore.put(virtualPortId, virtualPort);
             if (networkOflocalHostPorts == null) {
                 networkOflocalHostPorts = new HashSet<PortNumber>();
                 localHostPorts.putIfAbsent(network.id(), networkOflocalHostPorts);
@@ -396,6 +417,7 @@
                                               localTunnelPorts,
                                               type);
         } else if (type == Objective.Operation.REMOVE) {
+            vPortStore.remove(virtualPortId);
             if (networkOflocalHostPorts != null) {
                 l2ForwardService.programLocalBcastRules(deviceId, segmentationId,
                                                         inPort, networkOflocalHostPorts,