Fixing reconciling hosts to regions
Change-Id: Ib4b2ff52a7530a60c7933194bd35f2f2d2d4f552
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
index 8259fb3..cbb82b8 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/topo/model/ModelCache.java
@@ -545,9 +545,7 @@
RegionId rid = r.id();
UiRegion region = uiTopology.findRegion(rid);
if (region != null) {
- reconcileDevicesWithRegion(allDevices, r, rid, region);
- reconcileHostsWithRegion(allHosts, r, rid, region);
-
+ reconcileDevicesAndHostsWithRegion(allDevices, allHosts, rid, region);
} else {
log.warn("No UiRegion in topology for ID {}", rid);
}
@@ -567,37 +565,41 @@
uiTopology.computeSynthLinks();
}
- private void reconcileHostsWithRegion(Set<UiHost> allHosts, Region r,
- RegionId rid, UiRegion region) {
- Set<HostId> hostIds = services.region().getRegionHosts(rid);
- region.reconcileHosts(hostIds);
-
- hostIds.forEach(hid -> {
- UiHost h = uiTopology.findHost(hid);
- if (h != null) {
- h.setRegionId(r.id());
- allHosts.remove(h);
- } else {
- log.warn("Region host ID {} but no UiHost in topology", hid);
- }
- });
- }
-
- private void reconcileDevicesWithRegion(Set<UiDevice> allDevices, Region r,
- RegionId rid, UiRegion region) {
+ private void reconcileDevicesAndHostsWithRegion(Set<UiDevice> allDevices,
+ Set<UiHost> allHosts,
+ RegionId rid,
+ UiRegion region) {
Set<DeviceId> deviceIds = services.region().getRegionDevices(rid);
+ Set<HostId> hostIds = new HashSet<>();
region.reconcileDevices(deviceIds);
deviceIds.forEach(devId -> {
UiDevice dev = uiTopology.findDevice(devId);
if (dev != null) {
- dev.setRegionId(r.id());
+ dev.setRegionId(rid);
allDevices.remove(dev);
} else {
log.warn("Region device ID {} but no UiDevice in topology",
devId);
}
+
+ Set<Host> hosts = services.host().getConnectedHosts(devId);
+ for (Host h : hosts) {
+ HostId hid = h.id();
+ hostIds.add(hid);
+ UiHost host = uiTopology.findHost(hid);
+
+ if (host != null) {
+ host.setRegionId(rid);
+ allHosts.remove(host);
+ } else {
+ log.warn("Region host ID {} but no UiHost in topology",
+ hid);
+ }
+ }
});
+
+ region.reconcileHosts(hostIds);
}