code: private String storageOverhead(Map<Integer, Integer> finalNodeToOverhead) {
          double maxOverhead = Double.MIN_VALUE;
          PartitionBalance pb = new PartitionBalance(currentCluster, currentStoreDefs);
          StringBuilder sb = new StringBuilder();
          sb.append("Per-node store-overhead:").append(Utils.NEWLINE);
          DecimalFormat doubleDf = new DecimalFormat("####.##");
          for(int nodeId: finalCluster.getNodeIds()) {
              Node node = finalCluster.getNodeById(nodeId);
              String nodeTag = "Node " + String.format("%4d", nodeId) + " (" + node.getHost() + ")";
              int initialLoad = 0;
              if(currentCluster.getNodeIds().contains(nodeId)) {
                  initialLoad = pb.getNaryPartitionCount(nodeId);
              }
              int toLoad = 0;
              if(finalNodeToOverhead.containsKey(nodeId)) {
                  toLoad = finalNodeToOverhead.get(nodeId);
              }
              double overhead = (initialLoad + toLoad) / (double) initialLoad;
              if(initialLoad > 0 && maxOverhead < overhead) {
                  maxOverhead = overhead;
              }
  
              String loadTag = String.format("%6d", initialLoad) + " + "
                               + String.format("%6d", toLoad) + " -> "
                               + String.format("%6d", initialLoad + toLoad) + " ("
                               + doubleDf.format(overhead) + " X)";
              sb.append(nodeTag + " : " + loadTag).append(Utils.NEWLINE);
          }
          sb.append(Utils.NEWLINE)
            .append("****  Max per-node storage overhead: " + doubleDf.format(maxOverhead) + " X.")
            .append(Utils.NEWLINE);
          return (sb.toString());
      }
docs: Determines storage overhead and returns pretty printed summary.
  
  @param finalNodeToOverhead Map of node IDs from final cluster to number
  of partition-stores to be moved to the node.
  @return pretty printed string summary of storage overhead.