/**
   * Command to request current distributed upgrade status, a detailed status, or to force the
   * upgrade to proceed.
   *
   * <p>Usage: java DFSAdmin -upgradeProgress [status | details | force]
   *
   * @exception IOException
   */
  public int upgradeProgress(String[] argv, int idx) throws IOException {
    if (!(fs instanceof DistributedFileSystem)) {
      System.out.println("FileSystem is " + fs.getUri());
      return -1;
    }
    if (idx != argv.length - 1) {
      printUsage("-upgradeProgress");
      return -1;
    }

    UpgradeAction action;
    if ("status".equalsIgnoreCase(argv[idx])) {
      action = UpgradeAction.GET_STATUS;
    } else if ("details".equalsIgnoreCase(argv[idx])) {
      action = UpgradeAction.DETAILED_STATUS;
    } else if ("force".equalsIgnoreCase(argv[idx])) {
      action = UpgradeAction.FORCE_PROCEED;
    } else {
      printUsage("-upgradeProgress");
      return -1;
    }

    DistributedFileSystem dfs = (DistributedFileSystem) fs;
    UpgradeStatusReport status = dfs.distributedUpgradeProgress(action);
    String statusText =
        (status == null
            ? "There are no upgrades in progress."
            : status.getStatusText(action == UpgradeAction.DETAILED_STATUS));
    System.out.println(statusText);
    return 0;
  }
Example #2
0
 public String getUpgradeStatusText() {
   String statusText = "";
   try {
     UpgradeStatusReport status = fsn.distributedUpgradeProgress(UpgradeAction.GET_STATUS);
     statusText =
         (status == null ? "There are no upgrades in progress." : status.getStatusText(false));
   } catch (IOException e) {
     statusText = "Upgrade status unknown.";
   }
   return statusText;
 }
  /**
   * Gives a report on how the FileSystem is doing.
   *
   * @exception IOException if the filesystem does not exist.
   */
  public void report() throws IOException {
    if (fs instanceof DistributedFileSystem) {
      DistributedFileSystem dfs = (DistributedFileSystem) fs;
      DiskStatus ds = dfs.getDiskStatus();
      long capacity = ds.getCapacity();
      long used = ds.getDfsUsed();
      long remaining = ds.getRemaining();
      long presentCapacity = used + remaining;
      boolean mode = dfs.setSafeMode(FSConstants.SafeModeAction.SAFEMODE_GET);
      UpgradeStatusReport status = dfs.distributedUpgradeProgress(UpgradeAction.GET_STATUS);

      if (mode) {
        System.out.println("Safe mode is ON");
      }
      if (status != null) {
        System.out.println(status.getStatusText(false));
      }
      System.out.println(
          "Configured Capacity: " + capacity + " (" + StringUtils.byteDesc(capacity) + ")");
      System.out.println(
          "Present Capacity: "
              + presentCapacity
              + " ("
              + StringUtils.byteDesc(presentCapacity)
              + ")");
      System.out.println(
          "DFS Remaining: " + remaining + " (" + StringUtils.byteDesc(remaining) + ")");
      System.out.println("DFS Used: " + used + " (" + StringUtils.byteDesc(used) + ")");
      System.out.println(
          "DFS Used%: "
              + StringUtils.limitDecimalTo2(((1.0 * used) / presentCapacity) * 100)
              + "%");

      /* These counts are not always upto date. They are updated after
       * iteration of an internal list. Should be updated in a few seconds to
       * minutes. Use "-metaSave" to list of all such blocks and accurate
       * counts.
       */
      System.out.println("Under replicated blocks: " + dfs.getUnderReplicatedBlocksCount());
      System.out.println("Blocks with corrupt replicas: " + dfs.getCorruptBlocksCount());
      System.out.println("Missing blocks: " + dfs.getMissingBlocksCount());

      System.out.println();

      System.out.println("-------------------------------------------------");

      DatanodeInfo[] live = dfs.getClient().datanodeReport(DatanodeReportType.LIVE);
      DatanodeInfo[] dead = dfs.getClient().datanodeReport(DatanodeReportType.DEAD);
      System.out.println(
          "Datanodes available: "
              + live.length
              + " ("
              + (live.length + dead.length)
              + " total, "
              + dead.length
              + " dead)\n");

      for (DatanodeInfo dn : live) {
        System.out.println(dn.getDatanodeReport());
        System.out.println();
      }
      for (DatanodeInfo dn : dead) {
        System.out.println(dn.getDatanodeReport());
        System.out.println();
      }
    }
  }