You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2011/10/13 07:29:58 UTC
svn commit: r1182659 - in /hbase/branches/0.92: ./
src/test/java/org/apache/hadoop/hbase/
src/test/java/org/apache/hadoop/hbase/master/
src/test/java/org/apache/hadoop/hbase/regionserver/handler/
src/test/java/org/apache/hadoop/hbase/util/
Author: ramkrishna
Date: Thu Oct 13 05:29:58 2011
New Revision: 1182659
URL: http://svn.apache.org/viewvc?rev=1182659&view=rev
Log:
HBASE-4558 Refactor TestOpenedRegionHandler and TestOpenRegionHandler. (Ram)
Added:
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockRegionServerServices.java
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockServer.java
Removed:
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/MockRegionServerServices.java
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/MockServer.java
Modified:
hbase/branches/0.92/CHANGES.txt
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestCloseRegionHandler.java
hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java
Modified: hbase/branches/0.92/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/CHANGES.txt?rev=1182659&r1=1182658&r2=1182659&view=diff
==============================================================================
--- hbase/branches/0.92/CHANGES.txt (original)
+++ hbase/branches/0.92/CHANGES.txt Thu Oct 13 05:29:58 2011
@@ -579,6 +579,7 @@ Release 0.92.0 - Unreleased
and CF config (Mikhail Bautin)
HBASE-4422 Move block cache parameters and references into single
CacheConf class (jgray)
+ HBASE-4558 Refactor TestOpenedRegionHandler and TestOpenRegionHandler. (Ram)
TASKS
HBASE-3559 Move report of split to master OFF the heartbeat channel
Modified: hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java?rev=1182659&r1=1182658&r2=1182659&view=diff
==============================================================================
--- hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java (original)
+++ hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java Thu Oct 13 05:29:58 2011
@@ -1582,7 +1582,7 @@ public class HBaseTestingUtility {
*/
public static ZooKeeperWatcher createAndForceNodeToOpenedState(
HBaseTestingUtility TEST_UTIL, HRegion region,
- HRegionServer regionServer) throws ZooKeeperConnectionException,
+ ServerName serverName) throws ZooKeeperConnectionException,
IOException, KeeperException, NodeExistsException {
ZooKeeperWatcher zkw = new ZooKeeperWatcher(TEST_UTIL.getConfiguration(),
"unittest", new Abortable() {
@@ -1598,12 +1598,11 @@ public class HBaseTestingUtility {
}
});
- ZKAssign.createNodeOffline(zkw, region.getRegionInfo(), regionServer
- .getServerName());
+ ZKAssign.createNodeOffline(zkw, region.getRegionInfo(), serverName);
int version = ZKAssign.transitionNodeOpening(zkw, region
- .getRegionInfo(), regionServer.getServerName());
- ZKAssign.transitionNodeOpened(zkw, region.getRegionInfo(), regionServer
- .getServerName(), version);
+ .getRegionInfo(), serverName);
+ ZKAssign.transitionNodeOpened(zkw, region.getRegionInfo(), serverName,
+ version);
return zkw;
}
Modified: hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java?rev=1182659&r1=1182658&r2=1182659&view=diff
==============================================================================
--- hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java (original)
+++ hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/master/TestOpenedRegionHandler.java Thu Oct 13 05:29:58 2011
@@ -18,6 +18,9 @@
package org.apache.hadoop.hbase.master;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.mockito.Mockito.when;
import java.io.IOException;
import java.util.Collection;
@@ -29,14 +32,20 @@ import org.apache.commons.logging.LogFac
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.MiniHBaseCluster;
+import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.ZooKeeperConnectionException;
+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;
import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.MockServer;
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
+import org.apache.hadoop.hbase.zookeeper.ZKTable;
import org.apache.hadoop.hbase.zookeeper.ZKUtil;
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
import org.apache.zookeeper.KeeperException;
@@ -44,6 +53,7 @@ import org.apache.zookeeper.data.Stat;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+import org.mockito.Mockito;
public class TestOpenedRegionHandler {
@@ -59,16 +69,10 @@ public class TestOpenedRegionHandler {
@Before
public void setUp() throws Exception {
- // Start the cluster
- log("Starting cluster");
conf = HBaseConfiguration.create();
- resetConf = conf;
- conf.setInt("hbase.master.assignment.timeoutmonitor.period", 2000);
- conf.setInt("hbase.master.assignment.timeoutmonitor.timeout", 5000);
TEST_UTIL = new HBaseTestingUtility(conf);
- TEST_UTIL.startMiniCluster(NUM_MASTERS, NUM_RS);
}
-
+
@After
public void tearDown() throws Exception {
// Stop the cluster
@@ -78,6 +82,14 @@ public class TestOpenedRegionHandler {
@Test
public void testOpenedRegionHandlerOnMasterRestart() throws Exception {
+ // Start the cluster
+ log("Starting cluster");
+ conf = HBaseConfiguration.create();
+ resetConf = conf;
+ conf.setInt("hbase.master.assignment.timeoutmonitor.period", 2000);
+ conf.setInt("hbase.master.assignment.timeoutmonitor.timeout", 5000);
+ TEST_UTIL = new HBaseTestingUtility(conf);
+ TEST_UTIL.startMiniCluster(NUM_MASTERS, NUM_RS);
String tableName = "testOpenedRegionHandlerOnMasterRestart";
MiniHBaseCluster cluster = createRegions(tableName);
abortMaster(cluster);
@@ -88,7 +100,7 @@ public class TestOpenedRegionHandler {
// forcefully move a region to OPENED state in zk
// Create a ZKW to use in the test
zkw = HBaseTestingUtility.createAndForceNodeToOpenedState(TEST_UTIL,
- region, regionServer);
+ region, regionServer.getServerName());
// Start up a new master
log("Starting up a new master");
@@ -104,42 +116,56 @@ public class TestOpenedRegionHandler {
@Test
public void testShouldNotCompeleteOpenedRegionSuccessfullyIfVersionMismatches()
throws Exception {
- String tableName = "testIfVersionMismatches";
- MiniHBaseCluster cluster = createRegions(tableName);
- AssignmentManager am = cluster.getMaster().assignmentManager;
- abortMaster(cluster);
-
- HRegionServer regionServer = cluster.getRegionServer(0);
- HRegion region = getRegionBeingServed(cluster, regionServer);
-
- cluster.stopRegionServer(0);
- //create a node with OPENED state
- zkw = HBaseTestingUtility.createAndForceNodeToOpenedState(TEST_UTIL,
- region, regionServer);
- Stat stat = new Stat();
- String nodeName = ZKAssign.getNodeName(zkw, region
- .getRegionNameAsString());
- ZKUtil.getDataAndWatch(zkw, nodeName, stat);
- // use the version for the OpenedRegionHandler
- OpenedRegionHandler handler = new OpenedRegionHandler(regionServer, am,
- region.getRegionInfo(), regionServer
- .getServerName(), stat.getVersion());
- am.regionsInTransition.put(region
- .getRegionInfo().getEncodedName(), new RegionState(
- region.getRegionInfo(), RegionState.State.OPEN,
- System.currentTimeMillis(), regionServer.getServerName()));
-
- //Once again overwrite the same znode so that the version changes.
- ZKAssign.transitionNodeOpened(zkw, region.getRegionInfo(), regionServer
- .getServerName(), stat.getVersion()+1);
-
- // try processing the opened region.
- handler.process();
- List<String> znodes = ZKUtil.listChildrenAndWatchForNewChildren(zkw,
- zkw.assignmentZNode);
- String regionName = znodes.get(0);
- assertEquals("The region should not be opened successfully.", regionName,
- region.getRegionInfo().getEncodedName());
+ try {
+ int testIndex = 0;
+ TEST_UTIL.startMiniZKCluster();
+ final Server server = new MockServer(TEST_UTIL);
+ HTableDescriptor htd = new HTableDescriptor(
+ "testShouldNotCompeleteOpenedRegionSuccessfullyIfVersionMismatches");
+ HRegionInfo hri = new HRegionInfo(htd.getName(),
+ Bytes.toBytes(testIndex), Bytes.toBytes(testIndex + 1));
+ HRegion region = HRegion.createHRegion(hri, HBaseTestingUtility
+ .getTestDir(), 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()));
+ // create a node with OPENED state
+ zkw = HBaseTestingUtility.createAndForceNodeToOpenedState(TEST_UTIL,
+ region, server.getServerName());
+ when(am.getZKTable()).thenReturn(new ZKTable(zkw));
+ Stat stat = new Stat();
+ String nodeName = ZKAssign.getNodeName(zkw, region.getRegionInfo()
+ .getEncodedName());
+ ZKUtil.getDataAndWatch(zkw, nodeName, stat);
+
+ // use the version for the OpenedRegionHandler
+ OpenedRegionHandler handler = new OpenedRegionHandler(server, am, region
+ .getRegionInfo(), server.getServerName(), stat.getVersion());
+ // Once again overwrite the same znode so that the version changes.
+ ZKAssign.transitionNode(zkw, region.getRegionInfo(), server
+ .getServerName(), EventType.RS_ZK_REGION_OPENED,
+ EventType.RS_ZK_REGION_OPENED, stat.getVersion());
+
+ // Should not invoke assignmentmanager.regionOnline. If it is
+ // invoked as per current mocking it will throw null pointer exception.
+ boolean expectedException = false;
+ try {
+ handler.process();
+ } catch (Exception e) {
+ expectedException = true;
+ }
+ assertFalse("The process method should not throw any exception.",
+ expectedException);
+ List<String> znodes = ZKUtil.listChildrenAndWatchForNewChildren(zkw,
+ zkw.assignmentZNode);
+ String regionName = znodes.get(0);
+ assertEquals("The region should not be opened successfully.", regionName,
+ region.getRegionInfo().getEncodedName());
+ } finally {
+ TEST_UTIL.shutdownMiniZKCluster();
+ }
}
private MiniHBaseCluster createRegions(String tableName)
throws InterruptedException, ZooKeeperConnectionException, IOException,
Modified: hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestCloseRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestCloseRegionHandler.java?rev=1182659&r1=1182658&r2=1182659&view=diff
==============================================================================
--- hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestCloseRegionHandler.java (original)
+++ hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestCloseRegionHandler.java Thu Oct 13 05:29:58 2011
@@ -32,6 +32,8 @@ import org.apache.hadoop.hbase.HTableDes
import org.apache.hadoop.hbase.Server;
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.RegionServerServices;
+import org.apache.hadoop.hbase.util.MockRegionServerServices;
+import org.apache.hadoop.hbase.util.MockServer;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.KeeperException.NodeExistsException;
import org.junit.Test;
@@ -86,4 +88,4 @@ public class TestCloseRegionHandler {
assertTrue(server.isStopped());
}
}
-}
\ No newline at end of file
+}
Modified: hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java?rev=1182659&r1=1182658&r2=1182659&view=diff
==============================================================================
--- hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java (original)
+++ hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/regionserver/handler/TestOpenRegionHandler.java Thu Oct 13 05:29:58 2011
@@ -38,6 +38,8 @@ import org.apache.hadoop.hbase.executor.
import org.apache.hadoop.hbase.regionserver.HRegion;
import org.apache.hadoop.hbase.regionserver.RegionServerServices;
import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.MockRegionServerServices;
+import org.apache.hadoop.hbase.util.MockServer;
import org.apache.hadoop.hbase.zookeeper.ZKAssign;
import org.apache.hadoop.hbase.zookeeper.ZKUtil;
import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
Added: hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockRegionServerServices.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockRegionServerServices.java?rev=1182659&view=auto
==============================================================================
--- hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockRegionServerServices.java (added)
+++ hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockRegionServerServices.java Thu Oct 13 05:29:58 2011
@@ -0,0 +1,142 @@
+/**
+ * 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.util;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.ConcurrentSkipListMap;
+
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.catalog.CatalogTracker;
+import org.apache.hadoop.hbase.ipc.RpcServer;
+import org.apache.hadoop.hbase.regionserver.CompactionRequestor;
+import org.apache.hadoop.hbase.regionserver.FlushRequester;
+import org.apache.hadoop.hbase.regionserver.HRegion;
+import org.apache.hadoop.hbase.regionserver.RegionServerAccounting;
+import org.apache.hadoop.hbase.regionserver.RegionServerServices;
+import org.apache.hadoop.hbase.regionserver.wal.HLog;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
+import org.apache.zookeeper.KeeperException;
+
+/**
+ * Basic mock region server services.
+ */
+public class MockRegionServerServices implements RegionServerServices {
+ private final Map<String, HRegion> regions = new HashMap<String, HRegion>();
+ private boolean stopping = false;
+ private final ConcurrentSkipListMap<byte[], Boolean> rit =
+ new ConcurrentSkipListMap<byte[], Boolean>(Bytes.BYTES_COMPARATOR);
+
+ @Override
+ public boolean removeFromOnlineRegions(String encodedRegionName) {
+ return this.regions.remove(encodedRegionName) != null;
+ }
+
+ @Override
+ public HRegion getFromOnlineRegions(String encodedRegionName) {
+ return this.regions.get(encodedRegionName);
+ }
+
+ @Override
+ public void addToOnlineRegions(HRegion r) {
+ this.regions.put(r.getRegionInfo().getEncodedName(), r);
+ }
+
+ @Override
+ public void postOpenDeployTasks(HRegion r, CatalogTracker ct, boolean daughter)
+ throws KeeperException, IOException {
+ }
+
+ @Override
+ public boolean isStopping() {
+ return this.stopping;
+ }
+
+ @Override
+ public HLog getWAL() {
+ return null;
+ }
+
+ @Override
+ public RpcServer getRpcServer() {
+ return null;
+ }
+
+ @Override
+ public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS() {
+ return rit;
+ }
+
+ @Override
+ public FlushRequester getFlushRequester() {
+ return null;
+ }
+
+ @Override
+ public CompactionRequestor getCompactionRequester() {
+ return null;
+ }
+
+ @Override
+ public CatalogTracker getCatalogTracker() {
+ return null;
+ }
+
+ @Override
+ public ZooKeeperWatcher getZooKeeper() {
+ return null;
+ }
+
+ public RegionServerAccounting getRegionServerAccounting() {
+ return null;
+ }
+
+ @Override
+ public ServerName getServerName() {
+ return null;
+ }
+
+ @Override
+ public Configuration getConfiguration() {
+ return null;
+ }
+
+ @Override
+ public void abort(String why, Throwable e) {
+ //no-op
+ }
+
+ @Override
+ public void stop(String why) {
+ //no-op
+ }
+
+ @Override
+ public boolean isStopped() {
+ return false;
+ }
+
+ @Override
+ public boolean isAborted() {
+ return false;
+ }
+
+}
Added: hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockServer.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockServer.java?rev=1182659&view=auto
==============================================================================
--- hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockServer.java (added)
+++ hbase/branches/0.92/src/test/java/org/apache/hadoop/hbase/util/MockServer.java Thu Oct 13 05:29:58 2011
@@ -0,0 +1,112 @@
+/**
+ * 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.util;
+
+import java.io.IOException;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.Server;
+import org.apache.hadoop.hbase.ServerName;
+import org.apache.hadoop.hbase.ZooKeeperConnectionException;
+import org.apache.hadoop.hbase.catalog.CatalogTracker;
+import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher;
+
+/**
+ * Basic mock Server for handler tests.
+ */
+public class MockServer implements Server {
+ static final Log LOG = LogFactory.getLog(MockServer.class);
+ final static ServerName NAME = new ServerName("MockServer", 123, -1);
+
+ boolean stopped;
+ boolean aborted;
+ final ZooKeeperWatcher zk;
+ final HBaseTestingUtility htu;
+
+ @SuppressWarnings("unused")
+ public MockServer() throws ZooKeeperConnectionException, IOException {
+ // Shutdown default constructor by making it private.
+ this(null);
+ }
+
+ public MockServer(final HBaseTestingUtility htu)
+ throws ZooKeeperConnectionException, IOException {
+ this(htu, true);
+ }
+
+ /**
+ * @param htu Testing utility to use
+ * @param zkw If true, create a zkw.
+ * @throws ZooKeeperConnectionException
+ * @throws IOException
+ */
+ public MockServer(final HBaseTestingUtility htu, final boolean zkw)
+ throws ZooKeeperConnectionException, IOException {
+ this.htu = htu;
+ this.zk = zkw?
+ new ZooKeeperWatcher(htu.getConfiguration(), NAME.toString(), this, true):
+ null;
+ }
+
+ @Override
+ public void abort(String why, Throwable e) {
+ LOG.fatal("Abort why=" + why, e);
+ stop(why);
+ this.aborted = true;
+ }
+
+ @Override
+ public void stop(String why) {
+ LOG.debug("Stop why=" + why);
+ this.stopped = true;
+ }
+
+ @Override
+ public boolean isStopped() {
+ return this.stopped;
+ }
+
+ @Override
+ public Configuration getConfiguration() {
+ return this.htu.getConfiguration();
+ }
+
+ @Override
+ public ZooKeeperWatcher getZooKeeper() {
+ return this.zk;
+ }
+
+ @Override
+ public CatalogTracker getCatalogTracker() {
+ return null;
+ }
+
+ @Override
+ public ServerName getServerName() {
+ return NAME;
+ }
+
+ @Override
+ public boolean isAborted() {
+ // TODO Auto-generated method stub
+ return this.aborted;
+ }
+}