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