private static void logBlockReplicationInfo(
     Block block,
     BlockCollection bc,
     DatanodeDescriptor srcNode,
     NumberReplicas num,
     Iterable<DatanodeStorageInfo> storages) {
   int curReplicas = num.liveReplicas();
   int curExpectedReplicas = bc.getPreferredBlockReplication();
   StringBuilder nodeList = new StringBuilder();
   for (DatanodeStorageInfo storage : storages) {
     final DatanodeDescriptor node = storage.getDatanodeDescriptor();
     nodeList.append(node);
     nodeList.append(" ");
   }
   LOG.info(
       "Block: "
           + block
           + ", Expected Replicas: "
           + curExpectedReplicas
           + ", live replicas: "
           + curReplicas
           + ", corrupt replicas: "
           + num.corruptReplicas()
           + ", decommissioned replicas: "
           + num.decommissioned()
           + ", decommissioning replicas: "
           + num.decommissioning()
           + ", excess replicas: "
           + num.excessReplicas()
           + ", Is Open File: "
           + bc.isUnderConstruction()
           + ", Datanodes having this block: "
           + nodeList
           + ", Current Datanode: "
           + srcNode
           + ", Is current datanode decommissioning: "
           + srcNode.isDecommissionInProgress());
 }