diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java index f7831662d4e61442e82582818762547239b52551..0d8ea75dd42466600e9abf24637903750479985c 100644 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceIndex.java @@ -102,6 +102,15 @@ public abstract class DeviceIndex { IndexedEntity oio = new IndexedEntity(keyFields, o); if (oio.equals(ie)) return; } - removeEntity(entity, deviceKey); + + Iterator<Long> keyiter = this.queryByEntity(entity); + while (keyiter.hasNext()) { + Long key = keyiter.next(); + if (key.equals(deviceKey)) { + removeEntity(entity, deviceKey); + break; + } + } } -} \ No newline at end of file + +} diff --git a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java index 32d2ebc8ad73f148ae2c8f755cd07060de7cba3f..d02742dc987b8ea3e3d633e064748a53645e19a3 100755 --- a/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java +++ b/src/main/java/net/floodlightcontroller/devicemanager/internal/DeviceManagerImpl.java @@ -1162,7 +1162,14 @@ IFlowReconcileListener, IInfoProvider, IHAListener { if (deleteQueue != null) { for (Long l : deleteQueue) { + Device dev = deviceMap.get(l); + this.deleteDevice(dev); deviceMap.remove(l); + + // generate new device update + deviceUpdates = + updateUpdates(deviceUpdates, + new DeviceUpdate(dev, DELETE, null)); } }