private void updateProxyHosts()

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);
    }