You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2012/07/27 18:34:34 UTC
svn commit: r1366438 [3/3] - in /hbase/trunk/hbase-server/src:
main/jamon/org/apache/hadoop/hbase/tmpl/master/
main/java/org/apache/hadoop/hbase/ main/java/org/apache/hadoop/hbase/client/
main/java/org/apache/hadoop/hbase/master/ main/java/org/apache/h...
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManager.java Fri Jul 27 16:34:32 2012
@@ -36,6 +36,7 @@ import org.apache.hadoop.hbase.HBaseTest
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.HRegionInfo;
import org.apache.hadoop.hbase.MediumTests;
+import org.apache.hadoop.hbase.RegionException;
import org.apache.hadoop.hbase.RegionTransition;
import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.ServerLoad;
@@ -49,8 +50,7 @@ import org.apache.hadoop.hbase.client.Re
import org.apache.hadoop.hbase.executor.EventHandler.EventType;
import org.apache.hadoop.hbase.executor.ExecutorService;
import org.apache.hadoop.hbase.executor.ExecutorService.ExecutorType;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState.State;
+import org.apache.hadoop.hbase.master.RegionState.State;
import org.apache.hadoop.hbase.master.balancer.DefaultLoadBalancer;
import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory;
import org.apache.hadoop.hbase.master.handler.ServerShutdownHandler;
@@ -102,6 +102,7 @@ public class TestAssignmentManager {
private ServerManager serverManager;
private ZooKeeperWatcher watcher;
private LoadBalancer balancer;
+ private HMaster master;
@BeforeClass
public static void beforeClass() throws Exception {
@@ -155,7 +156,10 @@ public class TestAssignmentManager {
Mockito.when(this.serverManager.sendRegionOpen(SERVERNAME_A, REGIONINFO, -1)).
thenReturn(RegionOpeningState.OPENED);
Mockito.when(this.serverManager.sendRegionOpen(SERVERNAME_B, REGIONINFO, -1)).
- thenReturn(RegionOpeningState.OPENED);
+ thenReturn(RegionOpeningState.OPENED);
+ this.master = Mockito.mock(HMaster.class);
+
+ Mockito.when(this.master.getServerManager()).thenReturn(serverManager);
}
@After
@@ -299,8 +303,9 @@ public class TestAssignmentManager {
}
}
- private void createRegionPlanAndBalance(final AssignmentManager am,
- final ServerName from, final ServerName to, final HRegionInfo hri) {
+ private void createRegionPlanAndBalance(
+ final AssignmentManager am, final ServerName from,
+ final ServerName to, final HRegionInfo hri) throws RegionException {
// Call the balance function but fake the region being online first at
// servername from.
am.regionOnline(hri, from);
@@ -330,7 +335,7 @@ public class TestAssignmentManager {
.getConfiguration());
// Create an AM.
AssignmentManager am = new AssignmentManager(this.server,
- this.serverManager, ct, balancer, executor, null);
+ this.serverManager, ct, balancer, executor, null);
try {
// Make sure our new AM gets callbacks; once registered, can't unregister.
// Thats ok because we make a new zk watcher for each test.
@@ -370,7 +375,7 @@ public class TestAssignmentManager {
ZKAssign.transitionNodeOpened(this.watcher, REGIONINFO, SERVERNAME_B, versionid);
assertNotSame(-1, versionid);
// Wait on the handler removing the OPENED znode.
- while(am.isRegionInTransition(REGIONINFO) != null) Threads.sleep(1);
+ while(am.getRegionStates().isRegionInTransition(REGIONINFO)) Threads.sleep(1);
} finally {
executor.shutdown();
am.shutdown();
@@ -397,7 +402,7 @@ public class TestAssignmentManager {
.getConfiguration());
// Create an AM.
AssignmentManager am = new AssignmentManager(this.server,
- this.serverManager, ct, balancer, executor, null);
+ this.serverManager, ct, balancer, executor, null);
try {
processServerShutdownHandler(ct, am, false);
} finally {
@@ -448,15 +453,14 @@ public class TestAssignmentManager {
// We need a mocked catalog tracker.
CatalogTracker ct = Mockito.mock(CatalogTracker.class);
- LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
// Create an AM.
- AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(this.server,
- this.serverManager);
+ AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
+ this.server, this.serverManager);
// adding region to regions and servers maps.
am.regionOnline(REGIONINFO, SERVERNAME_A);
// adding region in pending close.
- am.regionsInTransition.put(REGIONINFO.getEncodedName(), new RegionState(REGIONINFO,
- State.SPLITTING, System.currentTimeMillis(), SERVERNAME_A));
+ am.getRegionStates().updateRegionState(
+ REGIONINFO, State.SPLITTING, SERVERNAME_A);
am.getZKTable().setEnabledTable(REGIONINFO.getTableNameAsString());
RegionTransition data = RegionTransition.createRegionTransition(EventType.RS_ZK_REGION_SPLITTING,
REGIONINFO.getRegionName(), SERVERNAME_A);
@@ -470,8 +474,8 @@ public class TestAssignmentManager {
// In both cases the znode should be deleted.
if (regionSplitDone) {
- assertTrue("Region state of region in SPLITTING should be removed from rit.",
- am.regionsInTransition.isEmpty());
+ assertFalse("Region state of region in SPLITTING should be removed from rit.",
+ am.getRegionStates().isRegionsInTransition());
} else {
while (!am.assignInvoked) {
Thread.sleep(1);
@@ -497,13 +501,12 @@ public class TestAssignmentManager {
CatalogTracker ct = Mockito.mock(CatalogTracker.class);
LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
// Create an AM.
- AssignmentManager am = new AssignmentManager(this.server, this.serverManager, ct, balancer,
- executor, null);
+ AssignmentManager am = new AssignmentManager(this.server,
+ this.serverManager, ct, balancer, executor, null);
// adding region to regions and servers maps.
am.regionOnline(REGIONINFO, SERVERNAME_A);
// adding region in pending close.
- am.regionsInTransition.put(REGIONINFO.getEncodedName(), new RegionState(REGIONINFO,
- State.PENDING_CLOSE));
+ am.getRegionStates().updateRegionState(REGIONINFO, State.PENDING_CLOSE);
if (state == Table.State.DISABLING) {
am.getZKTable().setDisablingTable(REGIONINFO.getTableNameAsString());
} else {
@@ -526,8 +529,8 @@ public class TestAssignmentManager {
// assert will be true but the piece of code added for HBASE-5927 will not
// do that.
if (state == Table.State.DISABLED) {
- assertTrue("Region state of region in pending close should be removed from rit.",
- am.regionsInTransition.isEmpty());
+ assertFalse("Region state of region in pending close should be removed from rit.",
+ am.getRegionStates().isRegionsInTransition());
}
} finally {
am.setEnabledTable(REGIONINFO.getTableNameAsString());
@@ -618,7 +621,7 @@ public class TestAssignmentManager {
.getConfiguration());
// Create an AM.
AssignmentManager am = new AssignmentManager(this.server,
- this.serverManager, ct, balancer, null, null);
+ this.serverManager, ct, balancer, null, null);
try {
// First make sure my mock up basically works. Unassign a region.
unassign(am, SERVERNAME_A, hri);
@@ -636,7 +639,7 @@ public class TestAssignmentManager {
// This transition should fail if the znode has been messed with.
ZKAssign.transitionNode(this.watcher, hri, SERVERNAME_A,
EventType.RS_ZK_REGION_SPLITTING, EventType.RS_ZK_REGION_SPLITTING, version);
- assertTrue(am.isRegionInTransition(hri) == null);
+ assertFalse(am.getRegionStates().isRegionInTransition(hri));
} finally {
am.shutdown();
}
@@ -654,7 +657,7 @@ public class TestAssignmentManager {
final RecoverableZooKeeper recoverableZk = Mockito
.mock(RecoverableZooKeeper.class);
AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
- this.server, this.serverManager);
+ this.server, this.serverManager);
Watcher zkw = new ZooKeeperWatcher(HBaseConfiguration.create(), "unittest",
null) {
public RecoverableZooKeeper getRecoverableZooKeeper() {
@@ -666,7 +669,7 @@ public class TestAssignmentManager {
.getChildren("/hbase/unassigned", zkw);
am.setWatcher((ZooKeeperWatcher) zkw);
try {
- am.processDeadServersAndRegionsInTransition();
+ am.processDeadServersAndRegionsInTransition(null);
fail("Expected to abort");
} catch (NullPointerException e) {
fail("Should not throw NPE");
@@ -678,7 +681,7 @@ public class TestAssignmentManager {
* TestCase verifies that the regionPlan is updated whenever a region fails to open
* and the master tries to process RS_ZK_FAILED_OPEN state.(HBASE-5546).
*/
- @Test
+ @Test(timeout = 5000)
public void testRegionPlanIsUpdatedWhenRegionFailsToOpen() throws IOException, KeeperException,
ServiceException, InterruptedException {
this.server.getConfiguration().setClass(
@@ -700,9 +703,8 @@ public class TestAssignmentManager {
EventType.M_ZK_REGION_OFFLINE, EventType.RS_ZK_REGION_FAILED_OPEN, v);
String path = ZKAssign.getNodeName(this.watcher, REGIONINFO
.getEncodedName());
- RegionState state = new RegionState(REGIONINFO, State.OPENING, System
- .currentTimeMillis(), SERVERNAME_A);
- am.regionsInTransition.put(REGIONINFO.getEncodedName(), state);
+ am.getRegionStates().updateRegionState(
+ REGIONINFO, State.OPENING, SERVERNAME_A);
// a dummy plan inserted into the regionPlans. This plan is cleared and
// new one is formed
am.regionPlans.put(REGIONINFO.getEncodedName(), new RegionPlan(
@@ -777,11 +779,11 @@ public class TestAssignmentManager {
* region which is in Opening state on a dead RS. Master should immediately
* assign the region and not wait for Timeout Monitor.(Hbase-5882).
*/
- @Test
+ @Test(timeout = 5000)
public void testRegionInOpeningStateOnDeadRSWhileMasterFailover() throws IOException,
KeeperException, ServiceException, InterruptedException {
- AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(this.server,
- this.serverManager);
+ AssignmentManagerWithExtrasForTesting am = setUpMockedAssignmentManager(
+ this.server, this.serverManager);
ZKAssign.createNodeOffline(this.watcher, REGIONINFO, SERVERNAME_A);
int version = ZKAssign.getVersion(this.watcher, REGIONINFO);
ZKAssign.transitionNode(this.watcher, REGIONINFO, SERVERNAME_A, EventType.M_ZK_REGION_OFFLINE,
@@ -810,7 +812,7 @@ public class TestAssignmentManager {
* @throws IOException
* @throws Exception
*/
- @Test
+ @Test(timeout = 5000)
public void testDisablingTableRegionsAssignmentDuringCleanClusterStartup()
throws KeeperException, IOException, Exception {
this.server.getConfiguration().setClass(HConstants.HBASE_MASTER_LOADBALANCER_CLASS,
@@ -888,7 +890,7 @@ public class TestAssignmentManager {
}
private void unassign(final AssignmentManager am, final ServerName sn,
- final HRegionInfo hri) {
+ final HRegionInfo hri) throws RegionException {
// Before I can unassign a region, I need to set it online.
am.regionOnline(hri, sn);
// Unassign region.
@@ -905,8 +907,7 @@ public class TestAssignmentManager {
* @throws KeeperException
*/
private AssignmentManagerWithExtrasForTesting setUpMockedAssignmentManager(final Server server,
- final ServerManager manager)
- throws IOException, KeeperException, ServiceException {
+ final ServerManager manager) throws IOException, KeeperException, ServiceException {
// We need a mocked catalog tracker. Its used by our AM instance.
CatalogTracker ct = Mockito.mock(CatalogTracker.class);
// Make an RS Interface implementation. Make it so a scanner can go against
@@ -938,7 +939,7 @@ public class TestAssignmentManager {
ExecutorService executor = startupMasterExecutor("mockedAMExecutor");
this.balancer = LoadBalancerFactory.getLoadBalancer(server.getConfiguration());
AssignmentManagerWithExtrasForTesting am = new AssignmentManagerWithExtrasForTesting(
- server, manager, ct, this.balancer, executor);
+ server, manager, ct, this.balancer, executor);
return am;
}
@@ -954,10 +955,10 @@ public class TestAssignmentManager {
boolean assignInvoked = false;
AtomicBoolean gate = new AtomicBoolean(true);
- public AssignmentManagerWithExtrasForTesting(final Server master,
- final ServerManager serverManager, final CatalogTracker catalogTracker,
- final LoadBalancer balancer, final ExecutorService service)
- throws KeeperException, IOException {
+ public AssignmentManagerWithExtrasForTesting(
+ final Server master, final ServerManager serverManager,
+ final CatalogTracker catalogTracker, final LoadBalancer balancer,
+ final ExecutorService service) throws KeeperException, IOException {
super(master, serverManager, catalogTracker, balancer, service, null);
this.es = service;
this.ct = catalogTracker;
@@ -987,12 +988,7 @@ public class TestAssignmentManager {
super.assign(region, setOfflineInZK, forceNewPlan, hijack);
this.gate.set(true);
}
-
- @Override
- public ServerName getRegionServerOfRegion(HRegionInfo hri) {
- return SERVERNAME_A;
- }
-
+
@Override
public void assign(java.util.List<HRegionInfo> regions, java.util.List<ServerName> servers)
{
@@ -1037,7 +1033,7 @@ public class TestAssignmentManager {
// the RIT region to our RIT Map in AM at processRegionsInTransition.
// First clear any inmemory state from AM so it acts like a new master
// coming on line.
- am.regionsInTransition.clear();
+ am.getRegionStates().regionsInTransition.clear();
am.regionPlans.clear();
try {
am.joinCluster();
Added: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java?rev=1366438&view=auto
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java (added)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java Fri Jul 27 16:34:32 2012
@@ -0,0 +1,201 @@
+/**
+ * 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 static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.hadoop.conf.Configuration;
+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.HTableDescriptor;
+import org.apache.hadoop.hbase.MediumTests;
+import org.apache.hadoop.hbase.ServerName;
+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.regionserver.HRegionServer;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.Writables;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.experimental.categories.Category;
+
+/**
+ * This tests AssignmentManager with a testing cluster.
+ */
+@Category(MediumTests.class)
+public class TestAssignmentManagerOnCluster {
+ private final static byte[] FAMILY = Bytes.toBytes("FAMILY");
+ private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
+ private final static Configuration conf = TEST_UTIL.getConfiguration();
+ private static HBaseAdmin admin;
+
+ @BeforeClass
+ public static void setUpBeforeClass() throws Exception {
+ TEST_UTIL.startMiniCluster(3);
+ admin = TEST_UTIL.getHBaseAdmin();
+ }
+
+ @AfterClass
+ public static void tearDownAfterClass() throws Exception {
+ TEST_UTIL.shutdownMiniCluster();
+ }
+
+ /**
+ * This tests region assignment
+ */
+ @Test
+ public void testAssignRegion() throws Exception {
+ String table = "testAssignRegion";
+ try {
+ HTableDescriptor desc = new HTableDescriptor(table);
+ desc.addFamily(new HColumnDescriptor(FAMILY));
+ admin.createTable(desc);
+
+ HTable meta = new HTable(conf, HConstants.META_TABLE_NAME);
+ HRegionInfo hri = new HRegionInfo(
+ desc.getName(), Bytes.toBytes("A"), Bytes.toBytes("Z"));
+ Put put = new Put(hri.getRegionName());
+ put.add(HConstants.CATALOG_FAMILY, HConstants.REGIONINFO_QUALIFIER,
+ Writables.getBytes(hri));
+ meta.put(put);
+
+ HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
+ master.assignRegion(hri);
+ master.getAssignmentManager().waitForAssignment(hri);
+
+ ServerName serverName = master.getAssignmentManager().
+ getRegionStates().getRegionServerOfRegion(hri);
+ TEST_UTIL.assertRegionOnServer(hri, serverName, 200);
+ } finally {
+ TEST_UTIL.deleteTable(Bytes.toBytes(table));
+ }
+ }
+
+ /**
+ * This tests offlining a region
+ */
+ @Test
+ public void testOfflineRegion() throws Exception {
+ String table = "testOfflineRegion";
+ try {
+ HRegionInfo hri = createTableAndGetOneRegion(table);
+
+ RegionStates regionStates = TEST_UTIL.getHBaseCluster().
+ getMaster().getAssignmentManager().getRegionStates();
+ ServerName serverName = regionStates.getRegionServerOfRegion(hri);
+ TEST_UTIL.assertRegionOnServer(hri, serverName, 200);
+ admin.offline(hri.getRegionName());
+
+ long timeoutTime = System.currentTimeMillis() + 800;
+ while (true) {
+ List<HRegionInfo> regions =
+ regionStates.getRegionsOfTable(Bytes.toBytes(table));
+ if (!regions.contains(hri)) break;
+ long now = System.currentTimeMillis();
+ if (now > timeoutTime) {
+ fail("Failed to offline the region in time");
+ break;
+ }
+ Thread.sleep(10);
+ }
+ RegionState regionState = regionStates.getRegionState(hri);
+ assertTrue(regionState.isOffline());
+ } finally {
+ TEST_UTIL.deleteTable(Bytes.toBytes(table));
+ }
+ }
+
+ /**
+ * This tests moving a region
+ */
+ @Test
+ public void testMoveRegion() throws Exception {
+ String table = "testMoveRegion";
+ try {
+ HRegionInfo hri = createTableAndGetOneRegion(table);
+
+ RegionStates regionStates = TEST_UTIL.getHBaseCluster().
+ getMaster().getAssignmentManager().getRegionStates();
+ ServerName serverName = regionStates.getRegionServerOfRegion(hri);
+ ServerName destServerName = null;
+ for (int i = 0; i < 3; i++) {
+ HRegionServer destServer = TEST_UTIL.getHBaseCluster().getRegionServer(i);
+ if (!destServer.getServerName().equals(serverName)) {
+ destServerName = destServer.getServerName();
+ break;
+ }
+ }
+ assertTrue(destServerName != null
+ && !destServerName.equals(serverName));
+ TEST_UTIL.getHBaseAdmin().move(hri.getEncodedNameAsBytes(),
+ Bytes.toBytes(destServerName.getServerName()));
+
+ long timeoutTime = System.currentTimeMillis() + 800;
+ while (true) {
+ ServerName sn = regionStates.getRegionServerOfRegion(hri);
+ if (sn != null && sn.equals(destServerName)) {
+ TEST_UTIL.assertRegionOnServer(hri, sn, 200);
+ break;
+ }
+ long now = System.currentTimeMillis();
+ if (now > timeoutTime) {
+ fail("Failed to move the region in time");
+ }
+ regionStates.waitForUpdate(50);
+ }
+
+ } finally {
+ TEST_UTIL.deleteTable(Bytes.toBytes(table));
+ }
+ }
+
+ HRegionInfo createTableAndGetOneRegion(
+ final String tableName) throws IOException, InterruptedException {
+ HTableDescriptor desc = new HTableDescriptor(tableName);
+ desc.addFamily(new HColumnDescriptor(FAMILY));
+ admin.createTable(desc, Bytes.toBytes("A"), Bytes.toBytes("Z"), 5);
+
+ // wait till the table is assigned
+ HMaster master = TEST_UTIL.getHBaseCluster().getMaster();
+ long timeoutTime = System.currentTimeMillis() + 100;
+ while (true) {
+ List<HRegionInfo> regions = master.getAssignmentManager().
+ getRegionStates().getRegionsOfTable(Bytes.toBytes(tableName));
+ if (regions.size() > 3) {
+ return regions.get(2);
+ }
+ long now = System.currentTimeMillis();
+ if (now > timeoutTime) {
+ fail("Could not find an online region");
+ }
+ Thread.sleep(10);
+ }
+ }
+
+ @org.junit.Rule
+ public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
+ new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();
+}
Propchange: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestAssignmentManagerOnCluster.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMXBean.java Fri Jul 27 16:34:32 2012
@@ -78,7 +78,7 @@ public class TestMXBean {
info.getCoprocessors().length);
Assert.assertEquals(master.getServerManager().getOnlineServersList().size(),
info.getRegionServers().size());
- Assert.assertEquals(master.getAssignmentManager().isRegionsInTransition(),
+ Assert.assertEquals(master.getAssignmentManager().getRegionStates().isRegionsInTransition(),
info.getRegionsInTransition().length > 0);
Assert.assertTrue(info.getRegionServers().size() == 4);
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java Fri Jul 27 16:34:32 2012
@@ -37,7 +37,6 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.executor.EventHandler.EventType;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
@@ -770,14 +769,14 @@ public class TestMasterFailover {
// PENDING_OPEN and enabled
region = enabledRegions.remove(0);
regionsThatShouldBeOnline.add(region);
- master.assignmentManager.regionsInTransition.put(region.getEncodedName(),
- new RegionState(region, RegionState.State.PENDING_OPEN, 0, null));
+ master.getAssignmentManager().getRegionStates().updateRegionState(
+ region, RegionState.State.PENDING_OPEN, null);
ZKAssign.createNodeOffline(zkw, region, master.getServerName());
// PENDING_OPEN and disabled
region = disabledRegions.remove(0);
regionsThatShouldBeOffline.add(region);
- master.assignmentManager.regionsInTransition.put(region.getEncodedName(),
- new RegionState(region, RegionState.State.PENDING_OPEN, 0, null));
+ master.getAssignmentManager().getRegionStates().updateRegionState(
+ region, RegionState.State.PENDING_OPEN, null);
ZKAssign.createNodeOffline(zkw, region, master.getServerName());
// This test is bad. It puts up a PENDING_CLOSE but doesn't say what
// server we were PENDING_CLOSE against -- i.e. an entry in
@@ -808,7 +807,7 @@ public class TestMasterFailover {
final long maxTime = 120000;
boolean done = master.assignmentManager.waitUntilNoRegionsInTransition(maxTime);
if (!done) {
- LOG.info("rit=" + master.assignmentManager.copyRegionsInTransition());
+ LOG.info("rit=" + master.getAssignmentManager().getRegionStates().getRegionsInTransition());
}
long elapsed = System.currentTimeMillis() - now;
assertTrue("Elapsed=" + elapsed + ", maxTime=" + maxTime + ", done=" + done,
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterStatusServlet.java Fri Jul 27 16:34:32 2012
@@ -33,7 +33,6 @@ import java.util.regex.Pattern;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.HBaseAdmin;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
import org.apache.hadoop.hbase.tmpl.master.AssignmentManagerStatusTmpl;
@@ -66,11 +65,11 @@ public class TestMasterStatusServlet {
@Before
public void setupBasicMocks() {
conf = HBaseConfiguration.create();
-
+
master = Mockito.mock(HMaster.class);
Mockito.doReturn(FAKE_HOST).when(master).getServerName();
Mockito.doReturn(conf).when(master).getConfiguration();
-
+
// Fake serverManager
ServerManager serverManager = Mockito.mock(ServerManager.class);
Mockito.doReturn(1.0).when(serverManager).getAverageLoad();
@@ -78,13 +77,15 @@ public class TestMasterStatusServlet {
// Fake AssignmentManager and RIT
AssignmentManager am = Mockito.mock(AssignmentManager.class);
+ RegionStates rs = Mockito.mock(RegionStates.class);
NavigableMap<String, RegionState> regionsInTransition =
Maps.newTreeMap();
regionsInTransition.put("r1",
- new RegionState(FAKE_HRI, RegionState.State.CLOSING, 12345L, FAKE_HOST));
- Mockito.doReturn(regionsInTransition).when(am).copyRegionsInTransition();
+ new RegionState(FAKE_HRI, RegionState.State.CLOSING, 12345L, FAKE_HOST));
+ Mockito.doReturn(rs).when(am).getRegionStates();
+ Mockito.doReturn(regionsInTransition).when(rs).getRegionsInTransition();
Mockito.doReturn(am).when(master).getAssignmentManager();
-
+
// Fake ZKW
ZooKeeperWatcher zkw = Mockito.mock(ZooKeeperWatcher.class);
Mockito.doReturn("fakequorum").when(zkw).getQuorum();
@@ -93,7 +94,6 @@ public class TestMasterStatusServlet {
// Mock admin
admin = Mockito.mock(HBaseAdmin.class);
}
-
private void setupMockTables() throws IOException {
HTableDescriptor tables[] = new HTableDescriptor[] {
@@ -153,7 +153,8 @@ public class TestMasterStatusServlet {
@Test
public void testAssignmentManagerTruncatedList() throws IOException {
AssignmentManager am = Mockito.mock(AssignmentManager.class);
-
+ RegionStates rs = Mockito.mock(RegionStates.class);
+
// Add 100 regions as in-transition
NavigableMap<String, RegionState> regionsInTransition =
Maps.newTreeMap();
@@ -161,14 +162,15 @@ public class TestMasterStatusServlet {
HRegionInfo hri = new HRegionInfo(FAKE_TABLE.getName(),
new byte[]{i}, new byte[]{(byte) (i+1)});
regionsInTransition.put(hri.getEncodedName(),
- new RegionState(hri, RegionState.State.CLOSING, 12345L, FAKE_HOST));
+ new RegionState(hri, RegionState.State.CLOSING, 12345L, FAKE_HOST));
}
// Add META in transition as well
regionsInTransition.put(
HRegionInfo.FIRST_META_REGIONINFO.getEncodedName(),
new RegionState(HRegionInfo.FIRST_META_REGIONINFO,
RegionState.State.CLOSING, 12345L, FAKE_HOST));
- Mockito.doReturn(regionsInTransition).when(am).copyRegionsInTransition();
+ Mockito.doReturn(rs).when(am).getRegionStates();
+ Mockito.doReturn(regionsInTransition).when(rs).getRegionsInTransition();
// Render to a string
StringWriter sw = new StringWriter();
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java Fri Jul 27 16:34:32 2012
@@ -32,7 +32,6 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.executor.EventHandler.EventType;
-import org.apache.hadoop.hbase.master.AssignmentManager.RegionState;
import org.apache.hadoop.hbase.master.handler.OpenedRegionHandler;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
@@ -124,9 +123,12 @@ public class TestOpenedRegionHandler {
region = HRegion.createHRegion(hri, TEST_UTIL.getDataTestDir(), TEST_UTIL.getConfiguration(), htd);
assertNotNull(region);
AssignmentManager am = Mockito.mock(AssignmentManager.class);
- when(am.isRegionInTransition(hri)).thenReturn(
- new RegionState(region.getRegionInfo(), RegionState.State.OPEN,
- System.currentTimeMillis(), server.getServerName()));
+ RegionStates rsm = Mockito.mock(RegionStates.class);
+ Mockito.doReturn(rsm).when(am).getRegionStates();
+ when(rsm.isRegionInTransition(hri)).thenReturn(false);
+ when(rsm.getRegionState(hri)).thenReturn(
+ new RegionState(region.getRegionInfo(), RegionState.State.OPEN,
+ System.currentTimeMillis(), server.getServerName()));
// create a node with OPENED state
zkw = HBaseTestingUtility.createAndForceNodeToOpenedState(TEST_UTIL,
region, server.getServerName());
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestSplitTransactionOnCluster.java Fri Jul 27 16:34:32 2012
@@ -436,7 +436,7 @@ public class TestSplitTransactionOnClust
hri.setOffline(true);
hri.setSplit(true);
ServerName regionServerOfRegion = master.getAssignmentManager()
- .getRegionServerOfRegion(hri);
+ .getRegionStates().getRegionServerOfRegion(hri);
assertTrue(regionServerOfRegion != null);
} finally {
@@ -515,7 +515,7 @@ public class TestSplitTransactionOnClust
hri.setOffline(true);
hri.setSplit(true);
ServerName regionServerOfRegion = master.getAssignmentManager()
- .getRegionServerOfRegion(hri);
+ .getRegionStates().getRegionServerOfRegion(hri);
assertTrue(regionServerOfRegion == null);
} finally {
// Set this flag back.
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALReplay.java Fri Jul 27 16:34:32 2012
@@ -45,7 +45,6 @@ import org.apache.hadoop.hbase.client.Sc
import org.apache.hadoop.hbase.io.hfile.HFile;
import org.apache.hadoop.hbase.master.HMaster;
import org.apache.hadoop.hbase.monitoring.MonitoredTask;
-import org.apache.hadoop.hbase.protobuf.RequestConverter;
import org.apache.hadoop.hbase.regionserver.FlushRequester;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
@@ -55,7 +54,6 @@ import org.apache.hadoop.hbase.util.Byte
import org.apache.hadoop.hbase.util.EnvironmentEdge;
import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
import org.apache.hadoop.hbase.util.Pair;
-import org.apache.hadoop.hbase.util.Strings;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
@@ -212,8 +210,12 @@ public class TestWALReplay {
Bytes.toBytes(destServer.getServerName().getServerName()));
while (true) {
ServerName serverName = master.getAssignmentManager()
- .getRegionServerOfRegion(destRegion.getRegionInfo());
- if (serverName != null && serverName.equals(destServer.getServerName())) break;
+ .getRegionStates().getRegionServerOfRegion(destRegion.getRegionInfo());
+ if (serverName != null && serverName.equals(destServer.getServerName())) {
+ TEST_UTIL.assertRegionOnServer(
+ destRegion.getRegionInfo(), serverName, 200);
+ break;
+ }
Thread.sleep(10);
}
}
@@ -709,12 +711,10 @@ public class TestWALReplay {
// Flusher used in this test. Keep count of how often we are called and
// actually run the flush inside here.
class TestFlusher implements FlushRequester {
- private int count = 0;
private HRegion r;
@Override
public void requestFlush(HRegion region) {
- count++;
try {
r.flushcache();
} catch (IOException e) {
Modified: hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java?rev=1366438&r1=1366437&r2=1366438&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java (original)
+++ hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/util/TestHBaseFsck.java Fri Jul 27 16:34:32 2012
@@ -63,12 +63,14 @@ import org.apache.hadoop.hbase.client.Re
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.executor.EventHandler.EventType;
+import org.apache.hadoop.hbase.master.AssignmentManager;
import org.apache.hadoop.hbase.master.HMaster;
+import org.apache.hadoop.hbase.master.RegionStates;
import org.apache.hadoop.hbase.protobuf.ProtobufUtil;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.HRegionServer;
-import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;
import org.apache.hadoop.hbase.util.HBaseFsck.ErrorReporter.ERROR_CODE;
+import org.apache.hadoop.hbase.util.HBaseFsck.HbckInfo;
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
import org.apache.zookeeper.KeeperException;
@@ -88,7 +90,8 @@ public class TestHBaseFsck {
private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();
private final static Configuration conf = TEST_UTIL.getConfiguration();
private final static byte[] FAM = Bytes.toBytes("fam");
- private final static int REGION_ONLINE_TIMEOUT = 300;
+ private final static int REGION_ONLINE_TIMEOUT = 800;
+ private static RegionStates regionStates;
// for the instance, reset every test run
private HTable tbl;
@@ -103,6 +106,10 @@ public class TestHBaseFsck {
public static void setUpBeforeClass() throws Exception {
TEST_UTIL.getConfiguration().setBoolean(HConstants.DISTRIBUTED_LOG_SPLITTING_KEY, false);
TEST_UTIL.startMiniCluster(3);
+
+ AssignmentManager assignmentManager =
+ TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager();
+ regionStates = assignmentManager.getRegionStates();
}
@AfterClass
@@ -406,6 +413,8 @@ public class TestHBaseFsck {
TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriDupe);
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
.waitForAssignment(hriDupe);
+ ServerName server = regionStates.getRegionServerOfRegion(hriDupe);
+ TEST_UTIL.assertRegionOnServer(hriDupe, server, REGION_ONLINE_TIMEOUT);
HBaseFsck hbck = doFsck(conf, false);
assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.DUPE_STARTKEYS,
@@ -482,6 +491,8 @@ public class TestHBaseFsck {
TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriDupe);
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
.waitForAssignment(hriDupe);
+ ServerName server = regionStates.getRegionServerOfRegion(hriDupe);
+ TEST_UTIL.assertRegionOnServer(hriDupe, server, REGION_ONLINE_TIMEOUT);
// Yikes! The assignment manager can't tell between diff between two
// different regions with the same start/endkeys since it doesn't
@@ -531,6 +542,8 @@ public class TestHBaseFsck {
TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriDupe);
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
.waitForAssignment(hriDupe);
+ ServerName server = regionStates.getRegionServerOfRegion(hriDupe);
+ TEST_UTIL.assertRegionOnServer(hriDupe, server, REGION_ONLINE_TIMEOUT);
HBaseFsck hbck = doFsck(conf,false);
assertErrors(hbck, new ERROR_CODE[] { ERROR_CODE.DEGENERATE_REGION,
@@ -568,6 +581,8 @@ public class TestHBaseFsck {
TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
.waitForAssignment(hriOverlap);
+ ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+ TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
HBaseFsck hbck = doFsck(conf, false);
assertErrors(hbck, new ERROR_CODE[] {
@@ -702,6 +717,8 @@ public class TestHBaseFsck {
TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
.waitForAssignment(hriOverlap);
+ ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+ TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
HBaseFsck hbck = doFsck(conf, false);
assertErrors(hbck, new ERROR_CODE[] {
@@ -739,6 +756,8 @@ public class TestHBaseFsck {
TEST_UTIL.getHBaseCluster().getMaster().assignRegion(hriOverlap);
TEST_UTIL.getHBaseCluster().getMaster().getAssignmentManager()
.waitForAssignment(hriOverlap);
+ ServerName server = regionStates.getRegionServerOfRegion(hriOverlap);
+ TEST_UTIL.assertRegionOnServer(hriOverlap, server, REGION_ONLINE_TIMEOUT);
HBaseFsck hbck = doFsck(conf, false);
assertErrors(hbck, new ERROR_CODE[] {
@@ -1038,9 +1057,9 @@ public class TestHBaseFsck {
int iTimes = 0;
while (true) {
- RegionTransition rt = RegionTransition.parseFrom(ZKAssign.getData(zkw,
- region.getEncodedName()));
- if (rt != null && rt.getEventType() == EventType.RS_ZK_REGION_OPENED) {
+ byte[] data = ZKAssign.getData(zkw, region.getEncodedName());
+ RegionTransition rt = data == null ? null : RegionTransition.parseFrom(data);
+ if (rt == null || rt.getEventType() == EventType.RS_ZK_REGION_OPENED) {
break;
}
Thread.sleep(100);