merge 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/branches/branch-2@1332532 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Uma Maheswara Rao G 2012-05-01 06:51:56 +00:00
parent b2f524582c
commit e29d76663c
3 changed files with 39 additions and 8 deletions

View File

@ -454,6 +454,9 @@ Release 2.0.0 - UNRELEASED
HDFS-3275. Skip format for non-file based directories.
(Amith D K via umamahesh)
HDFS-3286. When the threshold value for balancer is zero, unexpected output is displayed.
(Ashish Singhi via umamahesh)
BREAKDOWN OF HDFS-1623 SUBTASKS
HDFS-2179. Add fencing framework and mechanisms for NameNode HA. (todd)

View File

@ -94,7 +94,7 @@ import org.apache.hadoop.util.ToolRunner;
* </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 @@ public class Balancer {
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;
}

View File

@ -26,8 +26,6 @@ import java.util.List;
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.ExtendedBlock;
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 class TestBalancer extends TestCase {
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 class TestBalancer extends TestCase {
}
/** Test unevenly distributed cluster */
@Test
public void testBalancer1() throws Exception {
Configuration conf = new HdfsConfiguration();
initConf(conf);
@ -384,6 +411,7 @@ public class TestBalancer extends TestCase {
new String[] {RACK0, RACK1});
}
@Test
public void testBalancer2() throws Exception {
Configuration conf = new HdfsConfiguration();
initConf(conf);