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