You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by si...@apache.org on 2021/02/20 09:36:32 UTC

[ozone] branch master updated: HDDS-4849. Improve Ozone admin shell decommission/recommission/maintenance commands user experience (#1944)

This is an automated email from the ASF dual-hosted git repository.

siyao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/master by this push:
     new 4f5ab87  HDDS-4849. Improve Ozone admin shell decommission/recommission/maintenance commands user experience (#1944)
4f5ab87 is described below

commit 4f5ab87eb3fa6f4673a17c704e0e699ba8b99b5b
Author: Siyao Meng <50...@users.noreply.github.com>
AuthorDate: Sat Feb 20 01:36:13 2021 -0800

    HDDS-4849. Improve Ozone admin shell decommission/recommission/maintenance commands user experience (#1944)
---
 .../hdds/scm/node/NodeDecommissionManager.java     | 29 ++++++++++++----------
 .../scm/cli/datanode/DecommissionSubCommand.java   | 14 +++++++++--
 .../hdds/scm/cli/datanode/ListInfoSubcommand.java  |  2 +-
 .../scm/cli/datanode/MaintenanceSubCommand.java    | 16 +++++++++---
 .../scm/cli/datanode/RecommissionSubCommand.java   | 17 ++++++++++---
 5 files changed, 56 insertions(+), 22 deletions(-)

diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
index 30cae10..54bef6f 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/NodeDecommissionManager.java
@@ -108,8 +108,8 @@ public class NodeDecommissionManager {
       try {
         addr = InetAddress.getByName(host.getHostname());
       } catch (UnknownHostException e) {
-        throw new InvalidHostStringException("Unable to resolve the host "
-            +host.getRawHostname(), e);
+        throw new InvalidHostStringException("Unable to resolve host "
+            + host.getRawHostname(), e);
       }
       String dnsName;
       if (useHostnames) {
@@ -119,15 +119,17 @@ public class NodeDecommissionManager {
       }
       List<DatanodeDetails> found = nodeManager.getNodesByAddress(dnsName);
       if (found.size() == 0) {
-        throw new InvalidHostStringException("The string " +
-            host.getRawHostname()+" resolved to "+dnsName +
-            " is not found in SCM");
+        throw new InvalidHostStringException("Host " + host.getRawHostname()
+            + " (" + dnsName + ") is not running any datanodes registered"
+            + " with SCM."
+            + " Please check the host name.");
       } else if (found.size() == 1) {
         if (host.getPort() != -1 &&
             !validateDNPortMatch(host.getPort(), found.get(0))) {
-          throw new InvalidHostStringException("The string "+
-              host.getRawHostname()+" matched a single datanode, but the "+
-              "given port is not used by that Datanode");
+          throw new InvalidHostStringException("Host " + host.getRawHostname()
+              + " is running a datanode registered with SCM,"
+              + " but the port number doesn't match."
+              + " Please check the port number.");
         }
         results.add(found.get(0));
       } else if (found.size() > 1) {
@@ -139,9 +141,10 @@ public class NodeDecommissionManager {
           }
         }
         if (match == null) {
-          throw new InvalidHostStringException("The string " +
-              host.getRawHostname()+ "matched multiple Datanodes, but no "+
-              "datanode port matched the given port");
+          throw new InvalidHostStringException("Host " + host.getRawHostname()
+              + " is running multiple datanodes registered with SCM,"
+              + " but no port numbers match."
+              + " Please check the port number.");
         }
         results.add(match);
       }
@@ -281,8 +284,8 @@ public class NodeDecommissionManager {
         // NodeNotFoundException here expect if the node is remove in the
         // very short window between validation and starting decom. Therefore
         // log a warning and ignore the exception
-        LOG.warn("The host {} was not found in SCM. Ignoring the request to "+
-            "recommission it", dn.getHostName());
+        LOG.warn("Host {} was not found in SCM. Ignoring the request to "+
+            "recommission it.", dn.getHostName());
       }
     }
   }
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionSubCommand.java
index a4e7e3f..b4fa5ea 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionSubCommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DecommissionSubCommand.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hdds.scm.cli.datanode;
 
+import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
@@ -36,11 +37,20 @@ import java.util.List;
     versionProvider = HddsVersionProvider.class)
 public class DecommissionSubCommand extends ScmSubcommand {
 
+  @CommandLine.Spec
+  private CommandLine.Model.CommandSpec spec;
+
   @CommandLine.Parameters(description = "List of fully qualified host names")
-  private List<String> hosts = new ArrayList<String>();
+  private List<String> hosts = new ArrayList<>();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    scmClient.decommissionNodes(hosts);
+    if (hosts.size() > 0) {
+      scmClient.decommissionNodes(hosts);
+      System.out.println("Started decommissioning datanode(s):\n" +
+          String.join("\n", hosts));
+    } else {
+      GenericCli.missingSubcommand(spec);
+    }
   }
 }
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/ListInfoSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/ListInfoSubcommand.java
index 38ad390..ae4a534 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/ListInfoSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/ListInfoSubcommand.java
@@ -114,7 +114,7 @@ public class ListInfoSubcommand extends ScmSubcommand {
         + "/" + datanode.getHostName() + "/" + relatedPipelineNum +
         " pipelines)");
     System.out.println("Operational State: " + dna.getOpState());
-    System.out.println("Related pipelines: \n" + pipelineListInfo);
+    System.out.println("Related pipelines:\n" + pipelineListInfo);
   }
 
   private static class DatanodeWithAttributes {
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/MaintenanceSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/MaintenanceSubCommand.java
index fa1d802..2bdf072 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/MaintenanceSubCommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/MaintenanceSubCommand.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hdds.scm.cli.datanode;
 
+import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
@@ -36,8 +37,11 @@ import java.util.List;
     versionProvider = HddsVersionProvider.class)
 public class MaintenanceSubCommand extends ScmSubcommand {
 
+  @CommandLine.Spec
+  private CommandLine.Model.CommandSpec spec;
+
   @CommandLine.Parameters(description = "List of fully qualified host names")
-  private List<String> hosts = new ArrayList<String>();
+  private List<String> hosts = new ArrayList<>();
 
   @CommandLine.Option(names = {"--end"},
       description = "Automatically end maintenance after the given hours. "+
@@ -46,6 +50,12 @@ public class MaintenanceSubCommand extends ScmSubcommand {
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    scmClient.startMaintenanceNodes(hosts, endInHours);
+    if (hosts.size() > 0) {
+      scmClient.startMaintenanceNodes(hosts, endInHours);
+      System.out.println("Entering maintenance mode on datanode(s):\n" +
+          String.join("\n", hosts));
+    } else {
+      GenericCli.missingSubcommand(spec);
+    }
   }
-}
\ No newline at end of file
+}
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/RecommissionSubCommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/RecommissionSubCommand.java
index b6e2f3d..2c731af 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/RecommissionSubCommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/RecommissionSubCommand.java
@@ -17,6 +17,7 @@
  */
 package org.apache.hadoop.hdds.scm.cli.datanode;
 
+import org.apache.hadoop.hdds.cli.GenericCli;
 import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
@@ -27,6 +28,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 /**
+ * Recommission one or more datanodes.
  * Place decommissioned or maintenance nodes back into service.
  */
 @Command(
@@ -36,11 +38,20 @@ import java.util.List;
     versionProvider = HddsVersionProvider.class)
 public class RecommissionSubCommand extends ScmSubcommand {
 
+  @CommandLine.Spec
+  private CommandLine.Model.CommandSpec spec;
+
   @CommandLine.Parameters(description = "List of fully qualified host names")
-  private List<String> hosts = new ArrayList<String>();
+  private List<String> hosts = new ArrayList<>();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    scmClient.recommissionNodes(hosts);
+    if (hosts.size() > 0) {
+      scmClient.recommissionNodes(hosts);
+      System.out.println("Started recommissioning datanode(s):\n" +
+          String.join("\n", hosts));
+    } else {
+      GenericCli.missingSubcommand(spec);
+    }
   }
-}
\ No newline at end of file
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org