svn merge -c 1615107 from trunk for HDFS-6796. Improve the argument check during balancer command line parsing.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/branch-2@1615108 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Tsz-wo Sze 2014-08-01 14:15:57 +00:00
parent a38e398a22
commit 91794728d5
3 changed files with 53 additions and 14 deletions

View File

@ -88,6 +88,9 @@ Release 2.6.0 - UNRELEASED
HDFS-6798. Add test case for incorrect data node condition during
balancing. (Benoy Antony via Arpit Agarwal)
HDFS-6796. Improve the argument check during balancer command line parsing.
(Benoy Antony via szetszwo)
OPTIMIZATIONS
HDFS-6690. Deduplicate xattr names in memory. (wang)

View File

@ -1762,9 +1762,9 @@ public class Balancer {
if (args != null) {
try {
for(int i = 0; i < args.length; i++) {
checkArgument(args.length >= 2, "args = " + Arrays.toString(args));
if ("-threshold".equalsIgnoreCase(args[i])) {
i++;
checkArgument(++i < args.length,
"Threshold value is missing: args = " + Arrays.toString(args));
try {
threshold = Double.parseDouble(args[i]);
if (threshold < 1 || threshold > 100) {
@ -1779,7 +1779,8 @@ public class Balancer {
throw e;
}
} else if ("-policy".equalsIgnoreCase(args[i])) {
i++;
checkArgument(++i < args.length,
"Policy value is missing: args = " + Arrays.toString(args));
try {
policy = BalancingPolicy.parse(args[i]);
} catch(IllegalArgumentException e) {
@ -1787,16 +1788,26 @@ public class Balancer {
throw e;
}
} else if ("-exclude".equalsIgnoreCase(args[i])) {
i++;
checkArgument(++i < args.length,
"List of nodes to exclude | -f <filename> is missing: args = "
+ Arrays.toString(args));
if ("-f".equalsIgnoreCase(args[i])) {
nodesTobeExcluded = Util.getHostListFromFile(args[++i]);
checkArgument(++i < args.length,
"File containing nodes to exclude is not specified: args = "
+ Arrays.toString(args));
nodesTobeExcluded = Util.getHostListFromFile(args[i]);
} else {
nodesTobeExcluded = Util.parseHostList(args[i]);
}
} else if ("-include".equalsIgnoreCase(args[i])) {
i++;
checkArgument(++i < args.length,
"List of nodes to include | -f <filename> is missing: args = "
+ Arrays.toString(args));
if ("-f".equalsIgnoreCase(args[i])) {
nodesTobeIncluded = Util.getHostListFromFile(args[++i]);
checkArgument(++i < args.length,
"File containing nodes to include is not specified: args = "
+ Arrays.toString(args));
nodesTobeIncluded = Util.getHostListFromFile(args[i]);
} else {
nodesTobeIncluded = Util.parseHostList(args[i]);
}
@ -1805,12 +1816,8 @@ public class Balancer {
+ Arrays.toString(args));
}
}
if (!nodesTobeExcluded.isEmpty() && !nodesTobeIncluded.isEmpty()) {
System.err.println(
"-exclude and -include options cannot be specified together.");
throw new IllegalArgumentException(
"-exclude and -include options cannot be specified together.");
}
checkArgument(nodesTobeExcluded.isEmpty() || nodesTobeIncluded.isEmpty(),
"-exclude and -include options cannot be specified together.");
} catch(RuntimeException e) {
printUsage(System.err);
throw e;

View File

@ -867,13 +867,42 @@ public class TestBalancer {
} catch (IllegalArgumentException e) {
}
parameters = new String[] { "-threshold 1 -policy" };
parameters = new String[] {"-threshold", "1", "-policy"};
try {
Balancer.Cli.parse(parameters);
fail(reason);
} catch (IllegalArgumentException e) {
}
parameters = new String[] {"-threshold", "1", "-include"};
try {
Balancer.Cli.parse(parameters);
fail(reason);
} catch (IllegalArgumentException e) {
}
parameters = new String[] {"-threshold", "1", "-exclude"};
try {
Balancer.Cli.parse(parameters);
fail(reason);
} catch (IllegalArgumentException e) {
}
parameters = new String[] {"-include", "-f"};
try {
Balancer.Cli.parse(parameters);
fail(reason);
} catch (IllegalArgumentException e) {
}
parameters = new String[] {"-exclude", "-f"};
try {
Balancer.Cli.parse(parameters);
fail(reason);
} catch (IllegalArgumentException e) {
}
parameters = new String[] {"-include", "testnode1", "-exclude", "testnode2"};
try {
Balancer.Cli.parse(parameters);