@Override
    public HostInfos getHostInfos(ApplicationInstanceReference reference) {
        ApplicationId application = OrchestratorUtil.toApplicationId(reference);
        String hostsRootPath = hostsPath(application);

        List<String> hostnames;
        try {
            hostnames = curator.framework().getChildren().forPath(hostsRootPath);
        } catch (NoNodeException e) {
            return new HostInfos();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

        var hostInfos = new HashMap<HostName, HostInfo>();
        for (var hostname : hostnames) {
            byte[] bytes;
            try {
                bytes = curator.framework().getData().forPath(hostsRootPath + "/" + hostname);
            } catch (NoNodeException e) {
                // OK, node has been removed since getChildren()
                continue;
            } catch (Exception e) {
                throw new RuntimeException(e);
            }

            hostInfos.put(new HostName(hostname), WireHostInfo.deserialize(bytes));
        }

        return new HostInfos(hostInfos);
    }
Handles all ZooKeeper data structures related to each active application, including HostInfo.
Cache (if any) is above and not visible here.

@author hakonhall
orchestrator/src/main/java/com/yahoo/vespa/orchestrator/status/HostInfosServiceImpl.java