You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by fe...@apache.org on 2022/09/22 02:00:44 UTC

[ozone] branch HDDS-5713 updated: HDDS-7234. Add a common option for DiskBalancer commands (#3762)

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

ferhui pushed a commit to branch HDDS-5713
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/HDDS-5713 by this push:
     new 35791f59ba HDDS-7234. Add a common option for DiskBalancer commands (#3762)
35791f59ba is described below

commit 35791f59ba85f18808c446343b6aa7717d620aac
Author: Symious <yi...@foxmail.com>
AuthorDate: Thu Sep 22 10:00:39 2022 +0800

    HDDS-7234. Add a common option for DiskBalancer commands (#3762)
---
 .../scm/cli/datanode/DiskBalancerCommands.java     | 18 ++---
 .../cli/datanode/DiskBalancerCommonOptions.java    | 84 ++++++++++++++++++++++
 .../cli/datanode/DiskBalancerStartSubcommand.java  | 27 +++----
 .../cli/datanode/DiskBalancerStatusSubcommand.java |  7 +-
 .../cli/datanode/DiskBalancerStopSubcommand.java   | 29 +++-----
 .../cli/datanode/DiskBalancerUpdateSubcommand.java | 27 +++----
 6 files changed, 123 insertions(+), 69 deletions(-)

diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommands.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommands.java
index 649ee59eaa..dd70bbb491 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommands.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommands.java
@@ -38,36 +38,38 @@ import java.util.concurrent.Callable;
  *      [ -t/--threshold {@literal <threshold>}]
  *      [ -b/--bandwidthInMB {@literal <bandwidthInMB>}]
  *      [ -p/--parallelThread {@literal <parallelThread>}]
- *      [ -a/--alldatanodes {@literal <alldatanodes>}]
+ *      [ -a/--all {@literal <alldatanodes>}]
+ *      [ -d/--datanodes {@literal <datanodes>}]
  *      [ {@literal <hosts>}]
  *      Examples:
- *      ozone admin datanode diskbalancer start {@literal <hosts>}
+ *      ozone admin datanode diskbalancer start -d {@literal <hosts>}
  *        start balancer with default values in the configuration on specified
  *        datanodes
  *      ozone admin datanode diskbalancer start -a
  *        start balancer with default values in the configuration on all
  *        datanodes in the cluster
- *      ozone admin datanode diskbalancer start -t 5 {@literal <hosts>}
+ *      ozone admin datanode diskbalancer start -t 5 -d {@literal <hosts>}
  *        start balancer with a threshold of 5%
- *      ozone admin datanode diskbalancer start -b 20 {@literal <hosts>}
+ *      ozone admin datanode diskbalancer start -b 20 -d {@literal <hosts>}
  *        start balancer with maximum 20MB/s diskbandwidth
- *      ozone admin datanode diskbalancer start -p 5 {@literal <hosts>}
+ *      ozone admin datanode diskbalancer start -p 5 -d {@literal <hosts>}
  *        start balancer with 5 parallel thread on each datanode
  * To stop:
  *      ozone admin datanode diskbalancer stop -a
  *        stop diskblancer on all datanodes
- *      ozone admin datanode diskbalancer stop {@literal <hosts>};
+ *      ozone admin datanode diskbalancer stop -d {@literal <hosts>};
  *        stop diskblancer on all datanodes
  * To update:
  *      ozone admin datanode diskbalancer update -a
  *        update diskblancer configuration on all datanodes
- *      ozone admin datanode diskbalancer update {@literal <hosts>};
+ *      ozone admin datanode diskbalancer update -d {@literal <hosts>};
  *        update diskblancer configuration on all datanodes
  * To get report:
  *      ozone admin datanode diskbalancer report -c 10
  *        retrieve at most 10 datanodes that needs diskbalance most
  * To get status:
- *      ozone admin datanode diskbalancer status -s RUNNING {@literal <hosts>}
+ *      ozone admin datanode diskbalancer status -s RUNNING -d
+ *      {@literal <hosts>}
  *        return the diskbalancer status on datanodes where diskbalancer are in
  *        Running state
  *
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommonOptions.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommonOptions.java
new file mode 100644
index 0000000000..744de5169f
--- /dev/null
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerCommonOptions.java
@@ -0,0 +1,84 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.hadoop.hdds.scm.cli.datanode;
+
+import picocli.CommandLine;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
+
+/**
+ * Common options for DiskBalancer commands.
+ */
+public class DiskBalancerCommonOptions {
+
+  @CommandLine.Option(names = {"-a", "--all"},
+      description = "Run commands on all datanodes.")
+  private boolean allHosts;
+
+  @CommandLine.Option(names = {"-d", "--datanodes"},
+      description = "Run commands on specific datanodes, the content can be " +
+          "a list of hostnames or IPs. " +
+          "Examples: hostname1,hostname2,hostname3 or ip1,ip2,ip3")
+  private List<String> datanodes = new ArrayList<>();
+
+  /**
+   * Check the common options of DiskBalancerCommand.
+   * @return if the check passed
+   */
+  public boolean check() {
+    if (datanodes.size() == 0 && !allHosts) {
+      System.out.println("Datanode not specified. Please specify at least " +
+          "one datanode or use \"-a(--all)\" to start diskBalancer " +
+          "on all datanodes");
+      return false;
+    }
+    if (datanodes.size() != 0 && allHosts) {
+      System.out.println("Invalid option selection. " +
+          "Use either \"-a(--all)\" or \"-d(--datanodes)\".");
+      return false;
+    }
+    return true;
+  }
+
+  public String getHostString() {
+    return isAllHosts() ? "All datanodes" : String.join("\n", getDatanodes());
+  }
+
+  public Optional<List<String>> getSpecifiedDatanodes() {
+    return getDatanodes().size() == 0 ?
+        Optional.empty() : Optional.of(getDatanodes());
+  }
+
+  public boolean isAllHosts() {
+    return allHosts;
+  }
+
+  public void setAllHosts(boolean allHosts) {
+    this.allHosts = allHosts;
+  }
+
+  public List<String> getDatanodes() {
+    return datanodes;
+  }
+
+  public void setDatanodes(List<String> datanodes) {
+    this.datanodes = datanodes;
+  }
+}
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java
index e3862ba23f..f58c7a1f84 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java
@@ -22,12 +22,11 @@ import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
+import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
-import picocli.CommandLine.Parameters;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
@@ -55,31 +54,21 @@ public class DiskBalancerStartSubcommand extends ScmSubcommand {
       description = "Max parallelThread for DiskBalancer.")
   private Optional<Integer> parallelThread;
 
-  @Option(names = {"-a", "--allDatanodes"},
-      description = "Start diskBalancer on all datanodes.")
-  private boolean allHosts;
-
-  @Parameters(description = "List of fully qualified host names")
-  private List<String> hosts = new ArrayList<>();
+  @CommandLine.Mixin
+  private DiskBalancerCommonOptions commonOptions =
+      new DiskBalancerCommonOptions();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    if (hosts.size() == 0 && !allHosts) {
-      System.out.println("Datanode not specified. Please specify " +
-          "\"--allDatanodes\" to start diskBalancer on all datanodes");
-      return;
-    }
-    if (hosts.size() != 0 && allHosts) {
-      System.out.println("Confused options. Omit \"--allDatanodes\" or " +
-          "Datanodes.");
+    if (!commonOptions.check()) {
       return;
     }
     List<DatanodeAdminError> errors =
         scmClient.startDiskBalancer(threshold, bandwidthInMB, parallelThread,
-            hosts.size() == 0 ? Optional.empty() : Optional.of(hosts));
+            commonOptions.getSpecifiedDatanodes());
 
     System.out.println("Start DiskBalancer on datanode(s):\n" +
-        (allHosts ? "All datanodes" : String.join("\n", hosts)));
+        commonOptions.getHostString());
 
     if (errors.size() > 0) {
       for (DatanodeAdminError error : errors) {
@@ -95,6 +84,6 @@ public class DiskBalancerStartSubcommand extends ScmSubcommand {
 
   @VisibleForTesting
   public void setAllHosts(boolean allHosts) {
-    this.allHosts = allHosts;
+    this.commonOptions.setAllHosts(allHosts);
   }
 }
\ No newline at end of file
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
index 6a61876479..84dd3abe95 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
@@ -21,9 +21,9 @@ import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
+import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
-import picocli.CommandLine.Parameters;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -48,10 +48,11 @@ public class DiskBalancerStatusSubcommand extends ScmSubcommand {
       new HashSet<>(Arrays.asList("RUNNING", "STOPPED", "UNKNOWN"));
 
   @Option(names = {"-s", "--state"},
-      description = "RUNNING, STOPPED, UNKNOWN")
+      description = "RUNNING, STOPPED, UNKNOWN. Default state is RUNNING.")
   private String state = "RUNNING";
 
-  @Parameters(description = "List of fully qualified host names")
+  @CommandLine.Option(names = {"-d", "--datanodes"},
+      description = "Get diskBalancer status on specific datanodes.")
   private List<String> hosts = new ArrayList<>();
 
   @Override
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStopSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStopSubcommand.java
index 9479c030a6..f63f880a44 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStopSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStopSubcommand.java
@@ -22,14 +22,11 @@ import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
+import picocli.CommandLine;
 import picocli.CommandLine.Command;
-import picocli.CommandLine.Option;
-import picocli.CommandLine.Parameters;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Optional;
 
 /**
  * Handler to stop disk balancer.
@@ -40,29 +37,21 @@ import java.util.Optional;
     mixinStandardHelpOptions = true,
     versionProvider = HddsVersionProvider.class)
 public class DiskBalancerStopSubcommand extends ScmSubcommand {
-  @Option(names = {"-a", "--allDatanodes"},
-      description = "Stop diskBalancer on all datanodes.")
-  private boolean allHosts;
 
-  @Parameters(description = "List of fully qualified host names")
-  private List<String> hosts = new ArrayList<>();
+  @CommandLine.Mixin
+  private DiskBalancerCommonOptions commonOptions =
+      new DiskBalancerCommonOptions();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    if (hosts.size() == 0 && !allHosts) {
-      System.out.println("Datanode not specified.");
+    if (!commonOptions.check()) {
       return;
     }
-    if (hosts.size() != 0 && allHosts) {
-      System.out.println("Confused options. Omit \"--allDatanodes\" or " +
-          "Datanodes.");
-      return;
-    }
-    List<DatanodeAdminError> errors = scmClient.stopDiskBalancer(allHosts ?
-        Optional.empty() : Optional.of(hosts));
+    List<DatanodeAdminError> errors = scmClient.stopDiskBalancer(
+        commonOptions.getSpecifiedDatanodes());
 
     System.out.println("Stopping DiskBalancer on datanode(s):\n" +
-        (allHosts ? "All datanodes" : String.join("\n", hosts)));
+        commonOptions.getHostString());
     if (errors.size() > 0) {
       for (DatanodeAdminError error : errors) {
         System.err.println("Error: " + error.getHostname() + ": "
@@ -77,6 +66,6 @@ public class DiskBalancerStopSubcommand extends ScmSubcommand {
 
   @VisibleForTesting
   public void setAllHosts(boolean allHosts) {
-    this.allHosts = allHosts;
+    this.commonOptions.setAllHosts(allHosts);
   }
 }
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java
index b19fb6a53a..28ed4fd325 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java
@@ -22,12 +22,11 @@ import org.apache.hadoop.hdds.cli.HddsVersionProvider;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
 import org.apache.hadoop.hdds.scm.cli.ScmSubcommand;
 import org.apache.hadoop.hdds.scm.client.ScmClient;
+import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.Option;
-import picocli.CommandLine.Parameters;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
 
@@ -55,31 +54,21 @@ public class DiskBalancerUpdateSubcommand extends ScmSubcommand {
       description = "Max parallelThread for DiskBalancer.")
   private Optional<Integer> parallelThread;
 
-  @Option(names = {"-a", "--allDatanodes"},
-      description = "Start diskBalancer on all datanodes.")
-  private boolean allHosts;
-
-  @Parameters(description = "List of fully qualified host names")
-  private List<String> hosts = new ArrayList<>();
+  @CommandLine.Mixin
+  private DiskBalancerCommonOptions commonOptions =
+      new DiskBalancerCommonOptions();
 
   @Override
   public void execute(ScmClient scmClient) throws IOException {
-    if (hosts.size() == 0 && !allHosts) {
-      System.out.println("Datanode not specified.");
-      return;
-    }
-    if (hosts.size() != 0 && allHosts) {
-      System.out.println("Confused options. Omit \"--allDatanodes\" or " +
-          "Datanodes.");
+    if (!commonOptions.check()) {
       return;
     }
     List<DatanodeAdminError> errors =
         scmClient.updateDiskBalancerConfiguration(threshold, bandwidthInMB,
-            parallelThread,
-            hosts.size() == 0 ? Optional.empty() : Optional.of(hosts));
+            parallelThread, commonOptions.getSpecifiedDatanodes());
 
     System.out.println("Update DiskBalancer Configuration on datanode(s):\n" +
-        (allHosts ? "All datanodes" : String.join("\n", hosts)));
+        commonOptions.getHostString());
 
     if (errors.size() > 0) {
       for (DatanodeAdminError error : errors) {
@@ -93,6 +82,6 @@ public class DiskBalancerUpdateSubcommand extends ScmSubcommand {
 
   @VisibleForTesting
   public void setAllHosts(boolean allHosts) {
-    this.allHosts = allHosts;
+    this.commonOptions.setAllHosts(allHosts);
   }
 }
\ 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