/** Checks if the DFOs associated with logical node list are currently empty. */
  boolean areDFOsEmpty(Collection<LogicalNode> lns) {
    for (LogicalNode n : lns) {
      DiskFailoverManager dfo = FlumeNode.getInstance().getDFOManager(n.getName());

      if (!dfo.isEmpty()) return false;
    }
    return true;
  }
 boolean areDFOsReconfigured(Collection<LogicalNode> lns) {
   for (LogicalNode n : lns) {
     long val = n.getMetrics().getLongMetric(LogicalNode.A_RECONFIGURES);
     if (val == 0) {
       return false;
     }
   }
   return true;
 }
  /**
   * 여기에 위치하는게 맞나?
   *
   * @throws IOException
   * @throws InterruptedException
   * @throws RuntimeException
   * @throws FlumeSpecException
   */
  public void recover()
      throws IOException, InterruptedException, RuntimeException, FlumeSpecException {
    LogicalNode logicalNode = FlumeNode.getInstance().getLogicalNodeManager().get(logicalNodeName);
    if (logicalNode == null) {
      log.error("Failed recover [" + logicalNodeName + "] is not registed in CheckpointManager");
      return;
    }
    log.info("Closing logicalNode[" + logicalNodeName + "]");
    logicalNode.close();
    log.info("Closed logicalNode[" + logicalNodeName + "]");

    log.info("Restarting LogicalNode [" + logicalNodeName + "]");
    logicalNode.restartNode();
    log.info("Finished LogicalNode [" + logicalNodeName + "]");
  }