public void aggregateNodeValues() {
        List<Node> workingNodes = workingNodes();
        long activeDocs = calculateActiveDocs(workingNodes);
        activeDocuments = activeDocs;
        targetActiveDocuments = workingNodes.stream().mapToLong(Node::getTargetActiveDocuments).sum();
        int numWorkingNodes = workingNodes.size();
        if (numWorkingNodes > 0) {
            long average = activeDocs / numWorkingNodes;
            long skew = workingNodes.stream().mapToLong(node -> Math.abs(node.getActiveDocuments() - average)).sum();
            boolean balanced = skew <= activeDocs * maxContentSkew;
            if (balanced != isBalanced) {
                if (!isSparse())
                    log.info("Content in " + this + ", with " + numWorkingNodes + "/" + nodes.size() + " working nodes, is " +
                             (balanced ? "" : "not ") + "well balanced. Current deviation: " + skew * 100 / activeDocs +
                             "%. Active documents: " + activeDocs + ", skew: " + skew + ", average: " + average +
                             (balanced ? "" : ". Top-k summary fetch optimization is deactivated."));
                isBalanced = balanced;
            }
        } else {
            isBalanced = true;
        }
    }
Returns whether this group has sufficient active documents
(compared to other groups) that should receive traffic
container-search/src/main/java/com/yahoo/search/dispatch/searchcluster/Group.java