You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2014/04/23 20:18:28 UTC
svn commit: r1589482 - in
/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master:
RegionMovementTestHelper.java RegionPlacementTestBase.java
TestRegionChecker.java TestRegionPlacement.java
TestRegionPlacementDestructive.java
Author: liyin
Date: Wed Apr 23 18:18:28 2014
New Revision: 1589482
URL: http://svn.apache.org/r1589482
Log:
[Master] Make TestRegionChecker more stable.
Author: elliott
Summary:
TestRegionChecker was unstable because region movement could take a
while and could be sporadic in number. This had all been dealt with
in TestRegionPlacement. So I extracted the needed parts into a new
testing util.
Test Plan: bin/test/loop_tests.sh -t TestRegionChecker
Reviewers: liyintang, daviddeng, rshroff
Reviewed By: daviddeng
CC: hbase-eng@
Differential Revision: https://phabricator.fb.com/D1285388
Task ID: 3297398
Added:
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionMovementTestHelper.java
Modified:
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionPlacementTestBase.java
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionChecker.java
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java
hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacementDestructive.java
Added: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionMovementTestHelper.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionMovementTestHelper.java?rev=1589482&view=auto
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionMovementTestHelper.java (added)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionMovementTestHelper.java Wed Apr 23 18:18:28 2014
@@ -0,0 +1,186 @@
+/**
+ * Copyright The Apache Software Foundation
+ *
+ * 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;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HColumnDescriptor;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HServerAddress;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.MiniHBaseCluster;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+import org.apache.hadoop.hbase.util.Bytes;
+
+import java.io.IOException;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class RegionMovementTestHelper extends HBaseTestingUtility {
+
+ private static final Log LOG = LogFactory.getLog(RegionMovementTestHelper.class);
+
+ private static int sleepTime = 10;
+ private int lastRegionOpenedCount = 0;
+
+ public RegionMovementTestHelper() {
+ super();
+ sleepTime = 3 * this.getConfiguration().
+ getInt("hbase.regionserver.msginterval", 1000);
+ }
+
+ /**
+ * Create a table with specified table name and region number.
+ *
+ * @param table name of the table
+ * @param regionNum number of regions to create.
+ * @throws java.io.IOException
+ */
+ public void createTable(String table, int regionNum)
+ throws IOException, InterruptedException {
+ byte[] tableName = Bytes.toBytes(table);
+ byte[][] splitKeys = new byte[regionNum - 1][];
+ byte[][] putKeys = new byte[regionNum - 1][];
+ for (int i = 1; i < regionNum; i++) {
+ byte splitKey = (byte) i;
+ splitKeys[i - 1] = new byte[] { splitKey, splitKey, splitKey };
+ putKeys[i - 1] = new byte[] { splitKey, splitKey, (byte) (i - 1) };
+ }
+
+ HTableDescriptor desc = new HTableDescriptor(tableName);
+ desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));
+ new HBaseAdmin(getConfiguration()).createTable(desc, splitKeys);
+
+ HTable ht = new HTable(getConfiguration(), tableName);
+ Map<HRegionInfo, HServerAddress> regions = ht.getRegionsInfo();
+ assertEquals("Tried to create " + regionNum + " regions "
+ + "but only found " + regions.size(), regionNum, regions.size());
+
+ // Try and make sure that everything is up and assigned
+ waitForTableConsistent();
+ // Try and make sure that everything is assigned to their final destination.
+ waitOnStableRegionMovement();
+
+ try {
+ for (byte[] rk : putKeys) {
+ Put p = new Put(rk);
+ p.add(HConstants.CATALOG_FAMILY, Bytes.toBytes(0L), Bytes.toBytes("testValue"));
+ ht.put(p);
+ }
+ } finally {
+ ht.close();
+ }
+ }
+
+ public void waitOnTable(String tableName) throws IOException {
+
+ waitForTableConsistent();
+
+ HTable ht = new HTable(getConfiguration(), tableName);
+ Scan s = new Scan();
+ ResultScanner rs = null;
+ try {
+ rs = ht.getScanner(s);
+ Result r = null;
+ do {
+ r = rs.next();
+ } while (r != null);
+ } finally {
+ if (rs != null) rs.close();
+ if (ht != null) ht.close();
+ }
+ }
+
+
+ public void waitOnStableRegionMovement() throws IOException, InterruptedException {
+ int first = -1;
+ int second = 0;
+
+ int attempt = 0;
+ waitForTableConsistent();
+ while (first != second && attempt < 10) {
+ first = second;
+ second = getHBaseCluster().getMaster().getMetrics().getRegionsOpened();
+ Thread.sleep((++attempt) * sleepTime);
+ }
+ }
+ /**
+ * Verify the number of region movement is expected
+ *
+ * @param expected
+ * @throws InterruptedException
+ */
+ public void verifyRegionMovementNum(int expected)
+ throws InterruptedException {
+ MiniHBaseCluster cluster = getHBaseCluster();
+ HMaster m = cluster.getMaster();
+
+ int retry = 10;
+ int attempt = 0;
+ int currentRegionOpened, regionMovement;
+ do {
+ currentRegionOpened = m.getMetrics().getRegionsOpened();
+ regionMovement = currentRegionOpened - lastRegionOpenedCount;
+ LOG.debug("There are " + regionMovement + "/" + expected +
+ " regions moved after " + attempt + " attempts");
+ Thread.sleep((++attempt) * sleepTime);
+ } while (regionMovement < expected && attempt <= retry);
+
+ // update the lastRegionOpenedCount
+ resetLastOpenedRegionCount(currentRegionOpened);
+
+ assertTrue("There are only " + regionMovement + " instead of "
+ + expected + " region movement for " + attempt + " attempts",
+ expected <= regionMovement
+ );
+
+ int maxExpected = (int) (expected * 1.5f);
+
+ // Because of how over-loaded some jvm's are during tests, region open can take quite a while
+ // this will cause extra assignments as the region will get assigned to an intermediate
+ // region server before being moved to the preferred server. This check allows for some of that
+ // but not too much. 1.5x expected is pretty generous, but makes sure that some of the regions
+ // made it to their preferred destination in one move.
+ //
+ // On a real cluster this is less likely to happen as there will be more region servers and they
+ // will be less resource constrained.
+ assertTrue("There are " + regionMovement + " expecting max of "
+ + maxExpected + " after " + attempt + " attempts",
+ maxExpected >= regionMovement
+ );
+ }
+ public void resetLastOpenedRegionCount() {
+ resetLastOpenedRegionCount(getHBaseCluster().getMaster().getMetrics().getRegionsOpened());
+ }
+
+ public void resetLastOpenedRegionCount(int newCount) {
+ this.lastRegionOpenedCount = newCount;
+ }
+}
Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionPlacementTestBase.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionPlacementTestBase.java?rev=1589482&r1=1589481&r2=1589482&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionPlacementTestBase.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/RegionPlacementTestBase.java Wed Apr 23 18:18:28 2014
@@ -55,7 +55,7 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
public class RegionPlacementTestBase {
- protected final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
+ protected final static RegionMovementTestHelper TEST_UTIL = new RegionMovementTestHelper();
protected final static int META_REGION_OVERHEAD = 1;
protected final static int ROOT_REGION_OVERHEAD = 1;
final static Log LOG = LogFactory.getLog(RegionPlacementTestBase.class);
@@ -66,50 +66,7 @@ public class RegionPlacementTestBase {
protected int lastRegionOnPrimaryRSCount = 0;
protected int REGION_NUM = 10;
- private int lastRegionOpenedCount = 0;
- /**
- * Create a table with specified table name and region number.
- *
- * @param table name of the table
- * @param regionNum number of regions to create.
- * @throws java.io.IOException
- */
- protected void createTable(String table, int regionNum)
- throws IOException, InterruptedException {
- byte[] tableName = Bytes.toBytes(table);
- byte[][] splitKeys = new byte[regionNum - 1][];
- byte[][] putKeys = new byte[regionNum - 1][];
- for (int i = 1; i < regionNum; i++) {
- byte splitKey = (byte) i;
- splitKeys[i - 1] = new byte[] { splitKey, splitKey, splitKey };
- putKeys[i - 1] = new byte[] { splitKey, splitKey, (byte) (i - 1) };
- }
-
- HTableDescriptor desc = new HTableDescriptor(tableName);
- desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));
- admin.createTable(desc, splitKeys);
-
- HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
- Map<HRegionInfo, HServerAddress> regions = ht.getRegionsInfo();
- assertEquals("Tried to create " + regionNum + " regions "
- + "but only found " + regions.size(), regionNum, regions.size());
-
- // Try and make sure that everything is up and assigned
- TEST_UTIL.waitForTableConsistent();
- // Try and make sure that everything is assigned to their final destination.
- waitOnStableRegionMovement();
-
- try {
- for (byte[] rk : putKeys) {
- Put p = new Put(rk);
- p.add(HConstants.CATALOG_FAMILY, Bytes.toBytes(0L), Bytes.toBytes("testValue"));
- ht.put(p);
- }
- } finally {
- ht.close();
- }
- }
protected static void setUpCluster(int numSlaves) throws IOException, InterruptedException {
Configuration conf = TEST_UTIL.getConfiguration();
@@ -125,41 +82,10 @@ public class RegionPlacementTestBase {
TEST_UTIL.startMiniCluster(numSlaves);
sleepTime = 3 * TEST_UTIL.getConfiguration().
getInt("hbase.regionserver.msginterval", 1000);
- admin = new HBaseAdmin(conf);
+ admin = TEST_UTIL.getHBaseAdmin();
rp = new RegionPlacement(conf);
}
- protected void waitOnTable(String tableName) throws IOException {
-
- TEST_UTIL.waitForTableConsistent();
-
- HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
- Scan s = new Scan();
- ResultScanner rs = null;
- try {
- rs = ht.getScanner(s);
- Result r = null;
- do {
- r = rs.next();
- } while (r != null);
- } finally {
- if (rs != null) rs.close();
- if (ht != null) ht.close();
- }
- }
-
- protected void waitOnStableRegionMovement() throws IOException, InterruptedException {
- int first = -1;
- int second = 0;
-
- int attempt = 0;
- while (first != second && attempt < 10) {
- first = second;
- second = TEST_UTIL.getHBaseCluster().getMaster().getMetrics().getRegionsOpened();
- Thread.sleep((++attempt) * sleepTime);
- }
- }
-
/**
* To verify the region assignment status.
* It will check the assignment plan consistency between META and
@@ -180,7 +106,7 @@ public class RegionPlacementTestBase {
verifyMETAUpdated(plan);
// Verify the number of region movement is expected
- verifyRegionMovementNum(regionMovementNum);
+ TEST_UTIL.verifyRegionMovementNum(regionMovementNum);
// Verify the number of regions is assigned to the primary region server
// based on the plan is expected
@@ -218,7 +144,7 @@ public class RegionPlacementTestBase {
server.kill();
// Verify the user regions previously on the killed rs are reassigned.
- verifyRegionMovementNum(expectedRegionMovement);
+ TEST_UTIL.verifyRegionMovementNum(expectedRegionMovement);
// Verify only expectedRegionOnPrimary of the user regions are assigned
// to the primary region server based on the plan.
@@ -262,64 +188,12 @@ public class RegionPlacementTestBase {
return null;
}
- /**
- * Verify the number of region movement is expected
- *
- * @param expected
- * @throws InterruptedException
- */
- protected void verifyRegionMovementNum(int expected)
- throws InterruptedException {
- MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
- HMaster m = cluster.getMaster();
-
- int retry = 10;
- int attempt = 0;
- int currentRegionOpened, regionMovement;
- do {
- currentRegionOpened = m.getMetrics().getRegionsOpened();
- regionMovement = currentRegionOpened - lastRegionOpenedCount;
- LOG.debug("There are " + regionMovement + "/" + expected +
- " regions moved after " + attempt + " attempts");
- Thread.sleep((++attempt) * sleepTime);
- } while (regionMovement < expected && attempt <= retry);
-
- // update the lastRegionOpenedCount
- resetLastOpenedRegionCount(currentRegionOpened);
-
- assertTrue("There are only " + regionMovement + " instead of "
- + expected + " region movement for " + attempt + " attempts",
- expected <= regionMovement
- );
-
- int maxExpected = (int) (expected * 1.5f);
-
- // Because of how over-loaded some jvm's are during tests, region open can take quite a while
- // this will cause extra assignments as the region will get assigned to an intermediate
- // region server before being moved to the preferred server. This check allows for some of that
- // but not too much. 1.5x expected is pretty generous, but makes sure that some of the regions
- // made it to their preferred destination in one move.
- //
- // On a real cluster this is less likely to happen as there will be more region servers and they
- // will be less resource constrained.
- assertTrue("There are " + regionMovement + " expecting max of "
- + maxExpected + " after " + attempt + " attempts",
- maxExpected >= regionMovement
- );
- }
-
protected void resetLastRegionOnPrimary() throws IOException {
this.lastRegionOnPrimaryRSCount = getNumRegionisOnPrimaryRS();
}
- protected void resetLastOpenedRegionCount() {
- resetLastOpenedRegionCount(
- TEST_UTIL.getHBaseCluster().getMaster().getMetrics().getRegionsOpened());
- }
- private void resetLastOpenedRegionCount(int newCount) {
- this.lastRegionOpenedCount = newCount;
- }
+
/**
* Shuffle the assignment plan by switching two favored node positions.
@@ -572,9 +446,9 @@ public class RegionPlacementTestBase {
}
}
- waitOnStableRegionMovement();
- resetLastOpenedRegionCount();
+ TEST_UTIL.waitOnStableRegionMovement();
+ TEST_UTIL.resetLastOpenedRegionCount();
resetLastRegionOnPrimary();
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnStableRegionMovement();
}
}
Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionChecker.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionChecker.java?rev=1589482&r1=1589481&r2=1589482&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionChecker.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionChecker.java Wed Apr 23 18:18:28 2014
@@ -3,14 +3,13 @@ package org.apache.hadoop.hbase.master;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.MiniHBaseCluster;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.master.RegionChecker.RegionAvailabilityInfo;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.util.Bytes;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
+import org.junit.After;
import org.junit.Test;
import java.io.IOException;
@@ -19,20 +18,18 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
public class TestRegionChecker {
final static Log LOG = LogFactory.getLog(TestRegionChecker.class);
- private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
+ private final static RegionMovementTestHelper TEST_UTIL = new RegionMovementTestHelper();
private final static int SLAVES = 4;
- private static int lastRegionOpenedCount = 0;
- private static HBaseAdmin admin;
private static int REGION_NUM = 10;
- private static int META_REGION_NUM = 2;
private static RegionChecker regionChecker;
private static MiniHBaseCluster cluster;
private static final String TABLE_NAME_BASE = "testRegionAssignment";
- private static boolean firstTableCreated = false;
/*
EPS is small enough and fits for comparing availabilities
@@ -48,13 +45,11 @@ public class TestRegionChecker {
*/
private final double EPS = 1e-9;
- @BeforeClass
- public static void setupBeforeClass() throws Exception {
- init(true);
- // ONLY meta regions, ROOT and META, are assigned at beginning.
- verifyRegionMovementNum(META_REGION_NUM);
- }
-
+ /**
+ * Set up the cluster. This will start a mini cluster and enable or disable the region checker
+ * @param enableRegionChecker if the region checker should run on the master.
+ * @throws Exception
+ */
public static void init(boolean enableRegionChecker) throws Exception
{
Configuration conf = TEST_UTIL.getConfiguration();
@@ -69,14 +64,13 @@ public class TestRegionChecker {
TEST_UTIL.startMiniCluster(SLAVES);
- admin = new HBaseAdmin(conf);
-
cluster = TEST_UTIL.getHBaseCluster();
regionChecker = cluster.getActiveMaster().getServerManager().getRegionChecker();
}
- @AfterClass
- public static void tearDownAfterClass() throws Exception {
+ @After
+ public void cleanUp() throws Exception {
+ TEST_UTIL.resetLastOpenedRegionCount();
TEST_UTIL.shutdownMiniCluster();
}
@@ -98,7 +92,7 @@ public class TestRegionChecker {
// Create a table with REGION_NUM regions.
String tableName = TABLE_NAME_BASE + "testAvailabilityGoesDownWithRegionFail";
- createTable(tableName, REGION_NUM);
+ TEST_UTIL.createTable(tableName, REGION_NUM);
HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
Set<HRegionInfo> allRegions = ht.getRegionsInfo().keySet();
final int regionsMove = 1;
@@ -114,22 +108,26 @@ public class TestRegionChecker {
}
}
+ TEST_UTIL.waitOnStableRegionMovement();
+ TEST_UTIL.resetLastOpenedRegionCount();
+
LOG.debug("killing '" + regionToKill.getRegionNameAsString() + "' region");
cluster.getRegionServer(serverId).closeRegion(regionToKill, true);
- verifyRegionMovementNum(regionsMove);
+ TEST_UTIL.verifyRegionMovementNum(regionsMove);
LOG.debug("killed '" + regionToKill.getRegionNameAsString() + "' region");
check(allRegions, regionsToKill);
- deleteTable(tableName, regionsMove);
+ TEST_UTIL.deleteTable(Bytes.toBytes(tableName));
+ TEST_UTIL.resetLastOpenedRegionCount();
}
- @Test(timeout = 180000)
+ @Test(timeout = 360000)
public void testAvailabilityGoesDownWithRegionServerCleanFail() throws Exception {
testAvailabilityGoesDownWithRegionServerFail(true);
}
- @Test(timeout = 180000)
+ @Test(timeout = 360000)
public void testAvailabilityGoesDownWithRegionServerUncleanFail() throws Exception {
testAvailabilityGoesDownWithRegionServerFail(false);
}
@@ -140,7 +138,7 @@ public class TestRegionChecker {
// Create a table with REGION_NUM regions.
String tableName = TABLE_NAME_BASE + "testAvailabilityGoesDownWithRegionServerFail" + isFailClean;
- createTable(tableName, REGION_NUM);
+ TEST_UTIL.createTable(tableName, REGION_NUM);
HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
Set<HRegionInfo> allRegions = ht.getRegionsInfo().keySet();
@@ -152,6 +150,8 @@ public class TestRegionChecker {
regionsToKill.add(info.getRegionNameAsString());
}
+ TEST_UTIL.resetLastOpenedRegionCount();
+
int regionCnt = cluster.getRegionServer(serverId).getOnlineRegions().size();
if(isFailClean) {
@@ -165,11 +165,12 @@ public class TestRegionChecker {
LOG.debug("killed regionServer unclean");
}
- verifyRegionMovementNum(regionCnt);
+ TEST_UTIL.verifyRegionMovementNum(regionCnt);
check(allRegions, regionsToKill);
- deleteTable(tableName, regionCnt);
+ TEST_UTIL.deleteTable(Bytes.toBytes(tableName));
+ TEST_UTIL.resetLastOpenedRegionCount();
}
private void check(Set<HRegionInfo> allRegions, List<String> regionsToKill)
@@ -210,7 +211,7 @@ public class TestRegionChecker {
for (HRegionInfo info : allRegions) {
String region = info.getRegionNameAsString();
if (avDetDayAfter.containsKey(region) && !regionsToKill.contains(region)) {
- fail("Detailed availibility map shouldn't contain such a key " + region + ", because this region wasn't killed");
+ fail("Detailed availability map shouldn't contain such a key " + region + ", because this region wasn't killed");
}
}
@@ -218,95 +219,23 @@ public class TestRegionChecker {
for (HRegionInfo info : allRegions) {
String region = info.getRegionNameAsString();
if (avDetWeekAfter.containsKey(region) && !regionsToKill.contains(region)) {
- fail("Detailed availibility map shouldn't contain such a key " + region + ", because this region wasn't killed");
+ fail("Detailed availability map shouldn't contain such a key " + region + ", because this region wasn't killed");
}
}
}
- /** Get the region server
- * who is currently hosting ROOT
- * @return
- * @throws IOException
+ /**
+ * Get a region server currently hosting a user region
*/
private int getRegionServerId() throws IOException {
MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
for (int i = 0; i < SLAVES; i++) {
- if (cluster.getRegionServer(i).getRegionsAssignment().length > 0) {
+ // Find a region server with more than 2 regions.
+ // 2 because of root and meta.
+ if (cluster.getRegionServer(i).getRegionsAssignment().length > 2) {
return i;
}
}
return -1;
}
-
- /**
- * Verify the number of region movement is expected
- * @param expected
- * @throws InterruptedException
- */
- private static void verifyRegionMovementNum(int expected) throws InterruptedException {
- MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster();
- HMaster m = cluster.getActiveMaster();
-
- int retry = 10;
- long sleep = 3 * TEST_UTIL.getConfiguration().getInt("hbase.regionserver.msginterval", 1000);
- int attempt = 0;
- int currentRegionOpened, regionMovement;
- do {
- currentRegionOpened = m.getMetrics().getRegionsOpened();
- regionMovement = currentRegionOpened - lastRegionOpenedCount;
- LOG.debug("There are " + regionMovement + "/" + expected + " regions moved after " + attempt
- + " attempts");
- Thread.sleep((++attempt) * sleep);
- } while (regionMovement != expected && attempt <= retry);
-
- // update the lastRegionOpenedCount
- lastRegionOpenedCount = currentRegionOpened;
-
- assertEquals("There are only " + regionMovement + " instead of " + expected
- + " region movement for " + attempt + " attempts", regionMovement, expected);
- }
-
- /**
- * Create a table with specified table name and region number.
- * @param table
- * @param regionNum
- * @return
- * @throws IOException
- * @throws InterruptedException
- */
- private static void createTable(String table, int regionNum)
- throws IOException, InterruptedException {
-
- byte[] tableName = Bytes.toBytes(table);
- int expectedRegions = regionNum;
- byte[][] splitKeys = new byte[expectedRegions - 1][];
- for (int i = 1; i < expectedRegions; i++) {
- byte splitKey = (byte) i;
- splitKeys[i - 1] = new byte[] { splitKey, splitKey, splitKey };
- }
-
- HTableDescriptor desc = new HTableDescriptor(tableName);
- desc.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY));
- admin.createTable(desc, splitKeys);
-
- HTable ht = new HTable(TEST_UTIL.getConfiguration(), tableName);
- Map<HRegionInfo, HServerAddress> regions = ht.getRegionsInfo();
- assertEquals(
- "Tried to create " + expectedRegions + " regions " + "but only found " + regions.size(),
- expectedRegions, regions.size());
-
- if(firstTableCreated == false)
- {
- firstTableCreated = true;
- verifyRegionMovementNum(REGION_NUM);
- }
-
- return;
- }
-
- private static void deleteTable(String tableName, final int regionsMove) throws IOException {
- admin.disableTable(tableName);
- admin.deleteTable(tableName);
- lastRegionOpenedCount -= regionsMove;
- }
}
Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java?rev=1589482&r1=1589481&r2=1589482&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacement.java Wed Apr 23 18:18:28 2014
@@ -86,10 +86,10 @@ public class TestRegionPlacement extends
final String tableNameTwo = "testPrimaryPlacement2";
// Create a table with REGION_NUM regions.
- createTable(tableName, REGION_NUM);
+ TEST_UTIL.createTable(tableName, REGION_NUM);
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
AssignmentPlan plan = rp.getExistingAssignmentPlan();
@@ -100,21 +100,21 @@ public class TestRegionPlacement extends
expected.put(3, 2);
expected.put(2, 2);
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
assertTrue(verifyNumPrimaries(expected, plan));
//create additional table with 5 regions
- createTable(tableNameTwo, 6);
+ TEST_UTIL.createTable(tableNameTwo, 6);
expected.clear();
// after this we expect 4 regionservers with 4 regions
expected.put(4, 4);
- waitOnTable(tableName);
- waitOnTable(tableNameTwo);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnTable(tableNameTwo);
+ TEST_UTIL.waitOnStableRegionMovement();
plan = rp.getExistingAssignmentPlan();
assertTrue(verifyNumPrimaries(expected, plan));
@@ -129,17 +129,17 @@ public class TestRegionPlacement extends
AssignmentPlan currentPlan;
// Reset all of the counters.
- resetLastOpenedRegionCount();
+ TEST_UTIL.resetLastOpenedRegionCount();
resetLastRegionOnPrimary();
// Create a table with REGION_NUM regions.
final String tableName = "testRegionAssignment";
- createTable(tableName, REGION_NUM);
+ TEST_UTIL.createTable(tableName, REGION_NUM);
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
- verifyRegionMovementNum(REGION_NUM);
+ TEST_UTIL.verifyRegionMovementNum(REGION_NUM);
// Get the assignment plan from scanning the META table
currentPlan = rp.getExistingAssignmentPlan();
@@ -168,16 +168,16 @@ public class TestRegionPlacement extends
public void testRegionPlacementShuffle() throws Exception {
// Create a table with REGION_NUM regions.
final String tableName = "testRegionPlacementShuffle";
- createTable(tableName, REGION_NUM);
+ TEST_UTIL.createTable(tableName, REGION_NUM);
AssignmentPlan currentPlan = rp.getExistingAssignmentPlan();
// Wait on everything to settle down
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
// Reset the counts so that previous tests don't impact this.
- resetLastOpenedRegionCount();
+ TEST_UTIL.resetLastOpenedRegionCount();
resetLastRegionOnPrimary();
// Shuffle the secondary with tertiary favored nodes
@@ -200,8 +200,8 @@ public class TestRegionPlacement extends
rp.updateAssignmentPlan(shuffledPlan);
// Really really wait for the table.
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
verifyRegionAssignment(shuffledPlan, REGION_NUM, REGION_NUM);
}
@@ -216,7 +216,7 @@ public class TestRegionPlacement extends
public void testPinnedTable() throws Exception {
String tableName = "testPinnedTable";
- resetLastOpenedRegionCount();
+ TEST_UTIL.resetLastOpenedRegionCount();
resetLastRegionOnPrimary();
try {
@@ -237,12 +237,12 @@ public class TestRegionPlacement extends
admin.createTable(htd, Bytes.toBytes("aaaa"), Bytes.toBytes("zzzz"), REGION_NUM);
// Wait for things to stabilize
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
// Reset all of the counters.
resetLastRegionOnPrimary();
- resetLastOpenedRegionCount();
+ TEST_UTIL.resetLastOpenedRegionCount();
verifyRegionAssignment(rp.getExistingAssignmentPlan(), 0, REGION_NUM);
assertPinned(tableName, cluster, servers, unusedServer);
@@ -251,8 +251,8 @@ public class TestRegionPlacement extends
rp.updateAssignmentPlan(rp.getNewAssignmentPlan());
// Wait for things to stabilize
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
// Verify current plan
verifyRegionAssignment(rp.getExistingAssignmentPlan(), 0, REGION_NUM);
@@ -323,7 +323,7 @@ public class TestRegionPlacement extends
*/
@Test
public void testJsonToAP() throws Exception {
- createTable("testJsonAssignmentPlan", 3);
+ TEST_UTIL.createTable("testJsonAssignmentPlan", 3);
AssignmentPlan currentPlan = rp.getExistingAssignmentPlan();
RegionPlacement.printAssignmentPlan(currentPlan);
Modified: hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacementDestructive.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacementDestructive.java?rev=1589482&r1=1589481&r2=1589482&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacementDestructive.java (original)
+++ hbase/branches/0.89-fb/src/test/java/org/apache/hadoop/hbase/master/TestRegionPlacementDestructive.java Wed Apr 23 18:18:28 2014
@@ -42,16 +42,16 @@ public class TestRegionPlacementDestruct
public void testRegionPlacementKillMeta() throws Exception {
// Create a table with REGION_NUM regions.
final String tableName = "testRegionPlacementKillMeta";
- createTable(tableName, REGION_NUM);
+ TEST_UTIL.createTable(tableName, REGION_NUM);
AssignmentPlan currentPlan = rp.getExistingAssignmentPlan();
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnStableRegionMovement();
// Check to make sure the new table is on it's primaries.
verifyRegionOnPrimaryRS(REGION_NUM);
- resetLastOpenedRegionCount();
+ TEST_UTIL.resetLastOpenedRegionCount();
resetLastRegionOnPrimary();
HRegionServer meta = this.getRegionServerWithMETA();
@@ -65,8 +65,8 @@ public class TestRegionPlacementDestruct
verifyKillRegionServerWithMetaOrRoot(meta, expectedRegionOnPrimaryRS);
RegionPlacement.printAssignmentPlan(currentPlan);
- waitOnTable(tableName);
- waitOnStableRegionMovement();
+ TEST_UTIL.waitOnTable(tableName);
+ TEST_UTIL.waitOnStableRegionMovement();
// Start Root RS Kill Test
HRegionServer root = this.getRegionServerWithROOT();