HDFS-3286. When the threshold value for balancer is zero, unexpected output is displayed. Contributed by Ashish Singhi.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1332531 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
086fa860c0
commit
d37ec9d09e
@ -94,7 +94,7 @@
|
||||
* </pre>
|
||||
*
|
||||
* <p>DESCRIPTION
|
||||
* <p>The threshold parameter is a fraction in the range of (0%, 100%) with a
|
||||
* <p>The threshold parameter is a fraction in the range of (1%, 100%) with a
|
||||
* default value of 10%. The threshold sets a target for whether the cluster
|
||||
* is balanced. A cluster is balanced if for each datanode, the utilization
|
||||
* of the node (ratio of used space at the node to total capacity of the node)
|
||||
@ -1503,14 +1503,14 @@ static Parameters parse(String[] args) {
|
||||
i++;
|
||||
try {
|
||||
threshold = Double.parseDouble(args[i]);
|
||||
if (threshold < 0 || threshold > 100) {
|
||||
throw new NumberFormatException(
|
||||
if (threshold < 1 || threshold > 100) {
|
||||
throw new IllegalArgumentException(
|
||||
"Number out of range: threshold = " + threshold);
|
||||
}
|
||||
LOG.info( "Using a threshold of " + threshold );
|
||||
} catch(NumberFormatException e) {
|
||||
} catch(IllegalArgumentException e) {
|
||||
System.err.println(
|
||||
"Expecting a number in the range of [0.0, 100.0]: "
|
||||
"Expecting a number in the range of [1.0, 100.0]: "
|
||||
+ args[i]);
|
||||
throw e;
|
||||
}
|
||||
|
@ -26,8 +26,6 @@
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hadoop.conf.Configuration;
|
||||
@ -46,11 +44,14 @@
|
||||
import org.apache.hadoop.hdfs.protocol.LocatedBlock;
|
||||
import org.apache.hadoop.hdfs.protocol.HdfsConstants.DatanodeReportType;
|
||||
import org.apache.hadoop.hdfs.server.datanode.SimulatedFSDataset;
|
||||
import org.junit.Test;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
/**
|
||||
* This class tests if a balancer schedules tasks correctly.
|
||||
*/
|
||||
public class TestBalancer extends TestCase {
|
||||
public class TestBalancer {
|
||||
private static final Log LOG = LogFactory.getLog(
|
||||
"org.apache.hadoop.hdfs.TestBalancer");
|
||||
|
||||
@ -365,8 +366,33 @@ public void integrationTest(Configuration conf) throws Exception {
|
||||
oneNodeTest(conf);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test parse method in Balancer#Cli class with threshold value out of
|
||||
* boundaries.
|
||||
*/
|
||||
@Test
|
||||
public void testBalancerCliParseWithThresholdOutOfBoundaries() {
|
||||
String parameters[] = new String[] { "-threshold", "0" };
|
||||
String reason = "IllegalArgumentException is expected when threshold value"
|
||||
+ " is out of boundary.";
|
||||
try {
|
||||
Balancer.Cli.parse(parameters);
|
||||
fail(reason);
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals("Number out of range: threshold = 0.0", e.getMessage());
|
||||
}
|
||||
parameters = new String[] { "-threshold", "101" };
|
||||
try {
|
||||
Balancer.Cli.parse(parameters);
|
||||
fail(reason);
|
||||
} catch (IllegalArgumentException e) {
|
||||
assertEquals("Number out of range: threshold = 101.0", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/** Test a cluster with even distribution,
|
||||
* then a new empty node is added to the cluster*/
|
||||
@Test
|
||||
public void testBalancer0() throws Exception {
|
||||
Configuration conf = new HdfsConfiguration();
|
||||
initConf(conf);
|
||||
@ -375,6 +401,7 @@ public void testBalancer0() throws Exception {
|
||||
}
|
||||
|
||||
/** Test unevenly distributed cluster */
|
||||
@Test
|
||||
public void testBalancer1() throws Exception {
|
||||
Configuration conf = new HdfsConfiguration();
|
||||
initConf(conf);
|
||||
@ -384,6 +411,7 @@ public void testBalancer1() throws Exception {
|
||||
new String[] {RACK0, RACK1});
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBalancer2() throws Exception {
|
||||
Configuration conf = new HdfsConfiguration();
|
||||
initConf(conf);
|
||||
|
Loading…
Reference in New Issue
Block a user