lishuai
Committed by Gerrit Code Review

[ONOS-3364] Update the bug: when neutron delete port and VTNManager

monitor the event, get the port information which is null.

Change-Id: I844b24e3a1d3a8aba621f63bc1d17fdbad783929
...@@ -81,6 +81,11 @@ import org.onosproject.vtn.table.impl.L2ForwardServiceImpl; ...@@ -81,6 +81,11 @@ import org.onosproject.vtn.table.impl.L2ForwardServiceImpl;
81 import org.onosproject.vtn.util.DataPathIdGenerator; 81 import org.onosproject.vtn.util.DataPathIdGenerator;
82 import org.onosproject.vtn.util.VtnConfig; 82 import org.onosproject.vtn.util.VtnConfig;
83 import org.onosproject.vtn.util.VtnData; 83 import org.onosproject.vtn.util.VtnData;
84 +import org.onosproject.vtnrsc.AllowedAddressPair;
85 +import org.onosproject.vtnrsc.BindingHostId;
86 +import org.onosproject.vtnrsc.DefaultVirtualPort;
87 +import org.onosproject.vtnrsc.FixedIp;
88 +import org.onosproject.vtnrsc.SecurityGroup;
84 import org.onosproject.vtnrsc.SegmentationId; 89 import org.onosproject.vtnrsc.SegmentationId;
85 import org.onosproject.vtnrsc.SubnetId; 90 import org.onosproject.vtnrsc.SubnetId;
86 import org.onosproject.vtnrsc.TenantId; 91 import org.onosproject.vtnrsc.TenantId;
...@@ -148,10 +153,12 @@ public class VTNManager implements VTNService { ...@@ -148,10 +153,12 @@ public class VTNManager implements VTNService {
148 private static final String CONTROLLER_IP_KEY = "ipaddress"; 153 private static final String CONTROLLER_IP_KEY = "ipaddress";
149 public static final String DRIVER_NAME = "onosfw"; 154 public static final String DRIVER_NAME = "onosfw";
150 private static final String EX_PORT_NAME = "eth0"; 155 private static final String EX_PORT_NAME = "eth0";
156 + private static final String VIRTUALPORT = "vtn-virtual-port";
151 private static final String SWITCHES_OF_CONTROLLER = "switchesOfController"; 157 private static final String SWITCHES_OF_CONTROLLER = "switchesOfController";
152 private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts"; 158 private static final String SWITCH_OF_LOCAL_HOST_PORTS = "switchOfLocalHostPorts";
153 private static final String DEFAULT_IP = "0.0.0.0"; 159 private static final String DEFAULT_IP = "0.0.0.0";
154 160
161 + private EventuallyConsistentMap<VirtualPortId, VirtualPort> vPortStore;
155 private EventuallyConsistentMap<IpAddress, Boolean> switchesOfController; 162 private EventuallyConsistentMap<IpAddress, Boolean> switchesOfController;
156 private EventuallyConsistentMap<DeviceId, NetworkOfLocalHostPorts> switchOfLocalHostPorts; 163 private EventuallyConsistentMap<DeviceId, NetworkOfLocalHostPorts> switchOfLocalHostPorts;
157 164
...@@ -171,7 +178,21 @@ public class VTNManager implements VTNService { ...@@ -171,7 +178,21 @@ public class VTNManager implements VTNService {
171 .register(Host.class) 178 .register(Host.class)
172 .register(TenantNetwork.class) 179 .register(TenantNetwork.class)
173 .register(TenantId.class) 180 .register(TenantId.class)
174 - .register(SubnetId.class); 181 + .register(SubnetId.class)
182 + .register(VirtualPortId.class)
183 + .register(VirtualPort.State.class)
184 + .register(AllowedAddressPair.class)
185 + .register(FixedIp.class)
186 + .register(BindingHostId.class)
187 + .register(SecurityGroup.class)
188 + .register(IpAddress.class)
189 + .register(DefaultVirtualPort.class);
190 +
191 + vPortStore = storageService
192 + .<VirtualPortId, VirtualPort>eventuallyConsistentMapBuilder()
193 + .withName(VIRTUALPORT).withSerializer(serializer)
194 + .withTimestampProvider((k, v) -> clockService.getTimestamp())
195 + .build();
175 196
176 switchesOfController = storageService 197 switchesOfController = storageService
177 .<IpAddress, Boolean>eventuallyConsistentMapBuilder() 198 .<IpAddress, Boolean>eventuallyConsistentMapBuilder()
...@@ -355,8 +376,7 @@ public class VTNManager implements VTNService { ...@@ -355,8 +376,7 @@ public class VTNManager implements VTNService {
355 VirtualPortId virtualPortId = VirtualPortId.portId(ifaceId); 376 VirtualPortId virtualPortId = VirtualPortId.portId(ifaceId);
356 VirtualPort virtualPort = virtualPortService.getPort(virtualPortId); 377 VirtualPort virtualPort = virtualPortService.getPort(virtualPortId);
357 if (virtualPort == null) { 378 if (virtualPort == null) {
358 - log.error("The virtualPort of host is null"); 379 + virtualPort = vPortStore.get(virtualPortId);
359 - return;
360 } 380 }
361 381
362 Iterable<Device> devices = deviceService.getAvailableDevices(); 382 Iterable<Device> devices = deviceService.getAvailableDevices();
...@@ -383,6 +403,7 @@ public class VTNManager implements VTNService { ...@@ -383,6 +403,7 @@ public class VTNManager implements VTNService {
383 } 403 }
384 404
385 if (type == Objective.Operation.ADD) { 405 if (type == Objective.Operation.ADD) {
406 + vPortStore.put(virtualPortId, virtualPort);
386 if (networkOflocalHostPorts == null) { 407 if (networkOflocalHostPorts == null) {
387 networkOflocalHostPorts = new HashSet<PortNumber>(); 408 networkOflocalHostPorts = new HashSet<PortNumber>();
388 localHostPorts.putIfAbsent(network.id(), networkOflocalHostPorts); 409 localHostPorts.putIfAbsent(network.id(), networkOflocalHostPorts);
...@@ -396,6 +417,7 @@ public class VTNManager implements VTNService { ...@@ -396,6 +417,7 @@ public class VTNManager implements VTNService {
396 localTunnelPorts, 417 localTunnelPorts,
397 type); 418 type);
398 } else if (type == Objective.Operation.REMOVE) { 419 } else if (type == Objective.Operation.REMOVE) {
420 + vPortStore.remove(virtualPortId);
399 if (networkOflocalHostPorts != null) { 421 if (networkOflocalHostPorts != null) {
400 l2ForwardService.programLocalBcastRules(deviceId, segmentationId, 422 l2ForwardService.programLocalBcastRules(deviceId, segmentationId,
401 inPort, networkOflocalHostPorts, 423 inPort, networkOflocalHostPorts,
......