@Override
    public Map<String, ClusterReindexing> getReindexingStatus(ModelResult application) throws IOException {
        Map<ClusterId, List<ServiceInfo>> clusters = clusterControllerClusters(application);
        Map<ClusterId, CompletableFuture<Map<String, ClusterReindexing>>> futureStatusPerCluster = new HashMap<>();
        clusters.forEach((clusterId, clusterNodes) -> {
            var parallelRequests = clusterNodes.stream()
                    .map(this::getReindexingStatus)
                    .toList();
            CompletableFuture<Map<String, ClusterReindexing>> combinedRequest = CompletableFutures.firstOf(parallelRequests);
            futureStatusPerCluster.put(clusterId, combinedRequest);
        });

        try {
            Map<String, ClusterReindexing> statusPerCluster = new HashMap<>();
            futureStatusPerCluster.forEach((clusterId, futureStatus) -> {
                statusPerCluster.putAll(futureStatus.join());
            });
            return Map.copyOf(statusPerCluster);
        } catch (Exception e) {
            throw new IOException("Failed to get reindexing status from cluster controllers: " + e.getMessage(), e);
        }
    }
Retrieves reindexing status from cluster controllers over HTTP

@author bjorncs
configserver/src/main/java/com/yahoo/vespa/config/server/application/DefaultClusterReindexingStatusClient.java