in fractions/topology-webapp/src/main/java/org/wildfly/swarm/topology/webapp/runtime/TopologyProxyService.java [105:158]
private void updateProxyHosts(String serviceName, List<Topology.Entry> entries) {
HttpHandler proxyHandler = proxyHandlerMap.get(serviceName).getOptionalValue();
if (proxyHandler == null) {
// Service has been shutdown
proxyHandlerMap.remove(serviceName);
return;
}
LoadBalancingProxyClient proxyClient = null;
// with SWARM-189 the request controller subsystem does replace
// all HttpHandler (including ProxyHandler) with GlobalRequestControllerHandler,
// which then wraps the next handler in the chain
if (proxyHandler instanceof GlobalRequestControllerHandler) {
ProxyHandler proxy = (ProxyHandler) ((GlobalRequestControllerHandler) proxyHandler).getNext(); // next in the chain of handlers
proxyClient = (LoadBalancingProxyClient) proxy.getProxyClient();
} else {
proxyClient = (LoadBalancingProxyClient) ((ProxyHandler) proxyHandler).getProxyClient();
}
List<Topology.Entry> oldEntries = proxyEntries.get(serviceName);
List<Topology.Entry> entriesToRemove = new ArrayList<>();
List<Topology.Entry> entriesToAdd = new ArrayList<>();
if (oldEntries == null) {
entriesToAdd.addAll(entries);
} else {
for (Topology.Entry oldEntry : oldEntries) {
if (!entries.contains(oldEntry)) {
entriesToRemove.add(oldEntry);
}
}
for (Topology.Entry entry : entries) {
if (!oldEntries.contains(entry)) {
entriesToAdd.add(entry);
}
}
}
for (Topology.Entry entry : entriesToRemove) {
try {
proxyClient.removeHost(entryToURI(entry));
} catch (URISyntaxException ex) {
log.log(Level.WARNING, "Error converting topology entry to URI", ex);
}
}
for (Topology.Entry entry : entriesToAdd) {
try {
proxyClient.addHost(entryToURI(entry));
} catch (URISyntaxException ex) {
log.log(Level.WARNING, "Error converting topology entry to URI", ex);
}
}
proxyEntries.put(serviceName, entries);
}