dir + DEFAULT_RULES_FILE_NAME.
+ */
+ static String createRulesFile(String file, final Listdir + DEFAULT_RULES_FILE_NAME.
+ */
+ static String createRulesFile(String file) throws IOException {
+ return createRulesFile(file, Collections.emptyList());
+ }
+
+ static void cleanup(String file) throws IOException {
+ try {
+ Files.delete(FileSystems.getDefault().getPath(file));
+ } catch (NoSuchFileException nsfe) {
+ LOG.warn("FileNotFoundException for {}", file, nsfe);
+ }
+ }
+}
\ No newline at end of file
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java
similarity index 99%
rename from hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java
rename to hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java
index 38e19e2a1bc2..1dd092dea286 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java
+++ b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/LoadBalancerPerformanceEvaluation.java
@@ -87,7 +87,8 @@ public class LoadBalancerPerformanceEvaluation extends AbstractHBaseTool {
// Non-default configurations.
private void setupConf() {
- conf.setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, loadBalancerClazz, LoadBalancer.class);
+ conf.setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS, loadBalancerClazz,
+ LoadBalancer.class);
loadBalancer = LoadBalancerFactory.getLoadBalancer(conf);
}
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDoubleArrayCost.java b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDoubleArrayCost.java
similarity index 100%
rename from hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDoubleArrayCost.java
rename to hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestDoubleArrayCost.java
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
similarity index 77%
rename from hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
rename to hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
index 66a46ca6317f..18d7d05212aa 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
+++ b/hbase-balancer/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCost.java
@@ -1,27 +1,32 @@
/*
- * 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
- * - * http://www.apache.org/licenses/LICENSE-2.0 - *
- * 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.
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hbase.master.balancer;
-import static junit.framework.TestCase.assertNotNull;
-import static junit.framework.TestCase.assertTrue;
+import static org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.DEFAULT_RULES_FILE_NAME;
+import static org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.createRulesFile;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
import java.io.IOException;
+import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Collections;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Queue;
@@ -30,7 +35,7 @@
import java.util.concurrent.ThreadLocalRandom;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.hbase.HBaseClassTestRule;
-import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HBaseCommonTestingUtility;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.ServerName;
import org.apache.hadoop.hbase.client.RegionInfo;
@@ -48,14 +53,15 @@
@Category({ MasterTests.class, MediumTests.class })
public class TestStochasticLoadBalancerHeterogeneousCost extends StochasticBalancerTestBase {
+
@ClassRule
public static final HBaseClassTestRule CLASS_RULE =
- HBaseClassTestRule.forClass(TestStochasticLoadBalancerHeterogeneousCost.class);
+ HBaseClassTestRule.forClass(TestStochasticLoadBalancerHeterogeneousCost.class);
private static final Logger LOG =
- LoggerFactory.getLogger(TestStochasticLoadBalancerHeterogeneousCost.class);
+ LoggerFactory.getLogger(TestStochasticLoadBalancerHeterogeneousCost.class);
private static final double ALLOWED_WINDOW = 1.20;
- private static final HBaseTestingUtility HTU = new HBaseTestingUtility();
+ private static final HBaseCommonTestingUtility HTU = new HBaseCommonTestingUtility();
private static String RULES_FILE;
@BeforeClass
@@ -69,10 +75,8 @@ public static void beforeAllTests() throws IOException {
HeterogeneousRegionCountCostFunction.class.getName());
// Need to ensure test dir has been created.
assertTrue(FileSystem.get(HTU.getConfiguration()).mkdirs(HTU.getDataTestDir()));
- RULES_FILE = HTU.getDataTestDir(
- TestStochasticLoadBalancerHeterogeneousCostRules.DEFAULT_RULES_FILE_NAME).toString();
- conf.set(
- HeterogeneousRegionCountCostFunction.HBASE_MASTER_BALANCER_HETEROGENEOUS_RULES_FILE,
+ RULES_FILE = HTU.getDataTestDir(DEFAULT_RULES_FILE_NAME).toString();
+ conf.set(HeterogeneousRegionCountCostFunction.HBASE_MASTER_BALANCER_HETEROGENEOUS_RULES_FILE,
RULES_FILE);
loadBalancer = new StochasticLoadBalancer();
loadBalancer.setClusterInfoProvider(new DummyClusterInfoProvider(conf));
@@ -146,28 +150,29 @@ public void testOverloaded() throws IOException {
final int numRegions = 120;
final int numRegionsPerServer = 60;
- TestStochasticLoadBalancerHeterogeneousCostRules.createRulesFile(RULES_FILE);
+ createRulesFile(RULES_FILE);
final Map
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * 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.
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hbase.master.balancer;
+import static org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.DEFAULT_RULES_FILE_NAME;
+import static org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.cleanup;
+import static org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.createRulesFile;
+import static org.junit.Assert.assertEquals;
+
import java.io.IOException;
-import java.nio.charset.Charset;
-import java.nio.file.FileSystems;
-import java.nio.file.NoSuchFileException;
import java.util.Arrays;
import java.util.Collections;
-import java.util.List;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HBaseClassTestRule;
-import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HBaseCommonTestingUtility;
import org.apache.hadoop.hbase.testclassification.MasterTests;
import org.apache.hadoop.hbase.testclassification.MediumTests;
-import org.apache.hadoop.hdfs.DistributedFileSystem;
-import org.apache.hadoop.hdfs.MiniDFSCluster;
-import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
@@ -41,15 +39,15 @@
@Category({ MasterTests.class, MediumTests.class })
public class TestStochasticLoadBalancerHeterogeneousCostRules extends StochasticBalancerTestBase {
+
@ClassRule
public static final HBaseClassTestRule CLASS_RULE =
HBaseClassTestRule.forClass(TestStochasticLoadBalancerHeterogeneousCostRules.class);
@Rule
public TestName name = new TestName();
- static final String DEFAULT_RULES_FILE_NAME = "hbase-balancer.rules";
private HeterogeneousRegionCountCostFunction costFunction;
- private static final HBaseTestingUtility HTU = new HBaseTestingUtility();
+ private static final HBaseCommonTestingUtility HTU = new HBaseCommonTestingUtility();
/**
* Make a file for rules that is inside a temporary test dir named for the method so it doesn't
@@ -60,47 +58,22 @@ public class TestStochasticLoadBalancerHeterogeneousCostRules extends Stochastic
@BeforeClass
public static void beforeClass() throws IOException {
// Ensure test dir is created
- HTU.getTestFileSystem().mkdirs(HTU.getDataTestDir());
+ HTU.getDataTestDir().getFileSystem(HTU.getConfiguration()).mkdirs(HTU.getDataTestDir());
}
@Before
public void before() throws IOException {
// New rules file name per test.
- this.rulesFilename = HTU.getDataTestDir(
- this.name.getMethodName() + "." + DEFAULT_RULES_FILE_NAME).toString();
+ this.rulesFilename = HTU
+ .getDataTestDir(
+ this.name.getMethodName() + "." + DEFAULT_RULES_FILE_NAME)
+ .toString();
// Set the created rules filename into the configuration.
HTU.getConfiguration().set(
HeterogeneousRegionCountCostFunction.HBASE_MASTER_BALANCER_HETEROGENEOUS_RULES_FILE,
this.rulesFilename);
}
- /**
- * @param file Name of file to write rules into.
- * @return Full file name of the rules file which is dir + DEFAULT_RULES_FILE_NAME.
- */
- static String createRulesFile(String file, final Listdir + DEFAULT_RULES_FILE_NAME.
- */
- static String createRulesFile(String file) throws IOException {
- return createRulesFile(file, Collections.emptyList());
- }
-
- private static void cleanup(String file) throws IOException {
- try {
- java.nio.file.Files.delete(FileSystems.getDefault().getPath(file));
- } catch (NoSuchFileException nsfe) {
- System.out.println("FileNotFoundException for " + file);
- }
- }
-
@Test
public void testNoRules() throws IOException {
// Override what is in the configuration with the name of a non-existent file!
@@ -109,7 +82,7 @@ public void testNoRules() throws IOException {
"non-existent-file!");
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
}
@Test
@@ -119,18 +92,18 @@ public void testBadFormatInRules() throws IOException {
// in the configuration.
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
createRulesFile(this.rulesFilename, Collections.singletonList("bad rules format"));
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
createRulesFile(this.rulesFilename, Arrays.asList("srv[1-2] 10",
"bad_rules format", "a"));
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(1, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(1, this.costFunction.getNumberOfRulesLoaded());
}
@Test
@@ -144,7 +117,7 @@ public void testTwoRules() throws IOException {
createRulesFile(this.rulesFilename, Arrays.asList("^server1$ 10", "^server2 21"));
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(2, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(2, this.costFunction.getNumberOfRulesLoaded());
}
@Test
@@ -158,7 +131,7 @@ public void testBadRegexp() throws IOException {
createRulesFile(this.rulesFilename, Collections.singletonList("server[ 1"));
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(0, this.costFunction.getNumberOfRulesLoaded());
}
@Test
@@ -169,38 +142,11 @@ public void testNoOverride() throws IOException {
createRulesFile(this.rulesFilename, Arrays.asList("^server1$ 10", "^server2 21"));
this.costFunction = new HeterogeneousRegionCountCostFunction(HTU.getConfiguration());
this.costFunction.loadRules();
- Assert.assertEquals(2, this.costFunction.getNumberOfRulesLoaded());
+ assertEquals(2, this.costFunction.getNumberOfRulesLoaded());
// loading malformed configuration does not overload current
cleanup(this.rulesFilename);
this.costFunction.loadRules();
- Assert.assertEquals(2, this.costFunction.getNumberOfRulesLoaded());
- }
-
- @Test
- public void testLoadingFomHDFS() throws Exception {
- HTU.startMiniDFSCluster(3);
- try {
- MiniDFSCluster cluster = HTU.getDFSCluster();
- DistributedFileSystem fs = cluster.getFileSystem();
- // Writing file
- Path path = new Path(fs.getHomeDirectory(), DEFAULT_RULES_FILE_NAME);
- FSDataOutputStream stream = fs.create(path);
- stream.write("server1 10".getBytes());
- stream.flush();
- stream.close();
-
- Configuration configuration = HTU.getConfiguration();
-
- // start costFunction
- configuration.set(
- HeterogeneousRegionCountCostFunction.HBASE_MASTER_BALANCER_HETEROGENEOUS_RULES_FILE,
- path.toString());
- this.costFunction = new HeterogeneousRegionCountCostFunction(configuration);
- this.costFunction.loadRules();
- Assert.assertEquals(1, this.costFunction.getNumberOfRulesLoaded());
- } finally {
- HTU.shutdownMiniCluster();
- }
+ assertEquals(2, this.costFunction.getNumberOfRulesLoaded());
}
-}
+}
\ No newline at end of file
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS.java
new file mode 100644
index 000000000000..7d52f5afed0d
--- /dev/null
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/balancer/TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS.java
@@ -0,0 +1,81 @@
+/*
+ * 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
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.hbase.master.balancer;
+
+import static org.apache.hadoop.hbase.master.balancer.HeterogeneousCostRulesTestHelper.DEFAULT_RULES_FILE_NAME;
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.Path;
+import org.apache.hadoop.hbase.HBaseClassTestRule;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.testclassification.MasterTests;
+import org.apache.hadoop.hbase.testclassification.MediumTests;
+import org.apache.hadoop.hdfs.DistributedFileSystem;
+import org.apache.hadoop.hdfs.MiniDFSCluster;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+@Category({ MasterTests.class, MediumTests.class })
+public class TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS
+ extends StochasticBalancerTestBase {
+
+ @ClassRule
+ public static final HBaseClassTestRule CLASS_RULE =
+ HBaseClassTestRule.forClass(TestStochasticLoadBalancerHeterogeneousCostRulesLoadFromHDFS.class);
+
+ private HeterogeneousRegionCountCostFunction costFunction;
+ private static final HBaseTestingUtility HTU = new HBaseTestingUtility();
+
+ @Before
+ public void setUp() throws Exception {
+ HTU.startMiniCluster(1);
+ }
+
+ @After
+ public void tearDown() throws IOException {
+ HTU.shutdownMiniCluster();
+ }
+
+ @Test
+ public void testLoadingFomHDFS() throws Exception {
+ MiniDFSCluster cluster = HTU.getDFSCluster();
+ DistributedFileSystem fs = cluster.getFileSystem();
+ // Writing file
+ Path path = new Path(fs.getHomeDirectory(), DEFAULT_RULES_FILE_NAME);
+ FSDataOutputStream stream = fs.create(path);
+ stream.write("server1 10".getBytes());
+ stream.flush();
+ stream.close();
+
+ Configuration configuration = HTU.getConfiguration();
+
+ // start costFunction
+ configuration.set(
+ HeterogeneousRegionCountCostFunction.HBASE_MASTER_BALANCER_HETEROGENEOUS_RULES_FILE,
+ path.toString());
+ this.costFunction = new HeterogeneousRegionCountCostFunction(configuration);
+ this.costFunction.loadRules();
+ assertEquals(1, this.costFunction.getNumberOfRulesLoaded());
+ }
+}
\ No newline at end of file