From e7ed19d2778ae10073d91f94d883368784497000 Mon Sep 17 00:00:00 2001 From: Mandeep Dhami <mandeep.dhami@bigswitch.com> Date: Thu, 22 Dec 2011 15:27:44 -0800 Subject: [PATCH] Updated storage for IPaddress that was removed from the hashtable --- .../devicemanager/internal/DeviceManagerImpl.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java index 404e19745..dbed04cbb 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java @@ -809,6 +809,7 @@ public class DeviceManagerImpl implements IDeviceManager, IOFMessageListener, } // Also, if this address is currently mapped to a different device, fix it. + // This should be rare, so it is OK to do update the storage from here. // // NOTE: the mapping is observed, and the decision is made based on that, outside a lock. // So the state may change by the time we get to do the map update. But that is OK since @@ -818,10 +819,12 @@ public class DeviceManagerImpl implements IDeviceManager, IOFMessageListener, (deviceByNwaddr.getDataLayerAddressAsLong() != device.getDataLayerAddressAsLong())) { updateNeworkAddressMap = true; Device dCopy = new Device(deviceByNwaddr); + DeviceNetworkAddress naOld = dCopy.getNetworkAddress(nwSrc); Map<Integer, DeviceNetworkAddress> namap = dCopy.getNetworkAddressesMap(); if (namap.containsKey(nwSrc)) namap.remove(nwSrc); dCopy.setNetworkAddresses(namap.values()); this.devMgrMaps.updateMaps(dCopy); + if (naOld !=null) removeNetworkAddressFromStorage(dCopy, naOld); } } -- GitLab