/** * Create a snapshot of runnable nodes. * * @return The snapshot. */ public NodeSnapshot getNodeSnapshot() { int nodeCount = 0; Map<String, NodeContainer> hostRunnables = new HashMap<String, NodeContainer>(); for (Map.Entry<String, NodeContainer> entry : hostToRunnableNodes.entrySet()) { NodeContainer value = entry.getValue(); synchronized (value) { if (!value.isEmpty()) { hostRunnables.put(entry.getKey(), value.copy()); nodeCount += value.size(); } } } Map<Node, NodeContainer> rackRunnables = new HashMap<Node, NodeContainer>(); for (Map.Entry<Node, NodeContainer> entry : rackToRunnableNodes.entrySet()) { NodeContainer value = entry.getValue(); synchronized (value) { if (!value.isEmpty()) { rackRunnables.put(entry.getKey(), value.copy()); } } } return new NodeSnapshot(topologyCache, hostRunnables, rackRunnables, nodeCount); }