Remove host location when port down or device down
Also refactor Host Location Provider
Change-Id: I57d682ee51e80ddd7e141883521a12da705a336d
diff --git a/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java b/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java
index 64d24a7..76d14e7 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/host/impl/DistributedHostStore.java
@@ -266,6 +266,29 @@
}
@Override
+ public void removeLocation(HostId hostId, HostLocation location) {
+ hosts.compute(hostId, (id, existingHost) -> {
+ if (existingHost != null) {
+ checkState(Objects.equals(hostId.mac(), existingHost.mac()),
+ "Existing and new MAC addresses differ.");
+ checkState(Objects.equals(hostId.vlanId(), existingHost.vlan()),
+ "Existing and new VLANs differ.");
+
+ Set<HostLocation> locations = new HashSet<>(existingHost.locations());
+ locations.remove(location);
+
+ // Remove entire host if we are removing the last location
+ return locations.isEmpty() ? null :
+ new DefaultHost(existingHost.providerId(),
+ hostId, existingHost.mac(), existingHost.vlan(),
+ locations, existingHost.ipAddresses(),
+ existingHost.configured(), existingHost.annotations());
+ }
+ return null;
+ });
+ }
+
+ @Override
public int getHostCount() {
return hosts.size();
}