http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java index 07313db..77d8167 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/CloseRegionHandler.java @@ -26,13 +26,11 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.ServerName; -import org.apache.hadoop.hbase.coordination.CloseRegionCoordination; import org.apache.hadoop.hbase.executor.EventHandler; import org.apache.hadoop.hbase.executor.EventType; import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.regionserver.HRegion; import org.apache.hadoop.hbase.regionserver.RegionServerServices; -import org.apache.hadoop.hbase.util.ConfigUtil; /** * Handles closing of a region on a region server. @@ -41,7 +39,7 @@ import org.apache.hadoop.hbase.util.ConfigUtil; public class CloseRegionHandler extends EventHandler { // NOTE on priorities shutting down. There are none for close. There are some // for open. I think that is right. On shutdown, we want the meta to close - // before root and both to close after the user regions have closed. What + // after the user regions have closed. What // about the case where master tells us to shutdown a catalog region and we // have a running queue of user regions to close? private static final Log LOG = LogFactory.getLog(CloseRegionHandler.class); @@ -53,9 +51,6 @@ public class CloseRegionHandler extends EventHandler { // when we are aborting. private final boolean abort; private ServerName destination; - private CloseRegionCoordination closeRegionCoordination; - private CloseRegionCoordination.CloseRegionDetails closeRegionDetails; - private final boolean useZKForAssignment; /** * This method used internally by the RegionServer to close out regions. @@ -63,49 +58,25 @@ public class CloseRegionHandler extends EventHandler { * @param rsServices * @param regionInfo * @param abort If the regionserver is aborting. - * @param closeRegionCoordination consensus for closing regions - * @param crd object carrying details about region close task. + * @param destination */ public CloseRegionHandler(final Server server, final RegionServerServices rsServices, final HRegionInfo regionInfo, final boolean abort, - CloseRegionCoordination closeRegionCoordination, - CloseRegionCoordination.CloseRegionDetails crd) { - this(server, rsServices, regionInfo, abort, closeRegionCoordination, crd, - EventType.M_RS_CLOSE_REGION, null); - } - - public CloseRegionHandler(final Server server, - final RegionServerServices rsServices, - final HRegionInfo regionInfo, final boolean abort, - CloseRegionCoordination closeRegionCoordination, - CloseRegionCoordination.CloseRegionDetails crd, ServerName destination) { - this(server, rsServices, regionInfo, abort, closeRegionCoordination, crd, + this(server, rsServices, regionInfo, abort, EventType.M_RS_CLOSE_REGION, destination); } - public CloseRegionHandler(final Server server, + protected CloseRegionHandler(final Server server, final RegionServerServices rsServices, HRegionInfo regionInfo, - boolean abort, CloseRegionCoordination closeRegionCoordination, - CloseRegionCoordination.CloseRegionDetails crd, EventType eventType) { - this(server, rsServices, regionInfo, abort, closeRegionCoordination, crd, eventType, null); - } - - protected CloseRegionHandler(final Server server, - final RegionServerServices rsServices, HRegionInfo regionInfo, - boolean abort, CloseRegionCoordination closeRegionCoordination, - CloseRegionCoordination.CloseRegionDetails crd, - EventType eventType, ServerName destination) { + boolean abort, EventType eventType, ServerName destination) { super(server, eventType); this.server = server; this.rsServices = rsServices; this.regionInfo = regionInfo; this.abort = abort; this.destination = destination; - this.closeRegionCoordination = closeRegionCoordination; - this.closeRegionDetails = crd; - useZKForAssignment = ConfigUtil.useZKForAssignment(server.getConfiguration()); } public HRegionInfo getRegionInfo() { @@ -128,16 +99,8 @@ public class CloseRegionHandler extends EventHandler { // Close the region try { - if (useZKForAssignment && closeRegionCoordination.checkClosingState( - regionInfo, closeRegionDetails)) { - return; - } - - // TODO: If we need to keep updating CLOSING stamp to prevent against - // a timeout if this is long-running, need to spin up a thread? if (region.close(abort) == null) { - // This region got closed. Most likely due to a split. So instead - // of doing the setClosedState() below, let's just ignore cont + // This region got closed. Most likely due to a split. // The split message will clean up the master state. LOG.warn("Can't close region: was already closed during close(): " + regionInfo.getRegionNameAsString()); @@ -153,12 +116,7 @@ public class CloseRegionHandler extends EventHandler { } this.rsServices.removeFromOnlineRegions(region, destination); - if (!useZKForAssignment) { - rsServices.reportRegionStateTransition(TransitionCode.CLOSED, regionInfo); - } else { - closeRegionCoordination.setClosedState(region, this.server.getServerName(), - closeRegionDetails); - } + rsServices.reportRegionStateTransition(TransitionCode.CLOSED, regionInfo); // Done! Region is closed on this RS LOG.debug("Closed " + region.getRegionNameAsString());
http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java index f2d5f1f..21e84ae 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenMetaHandler.java @@ -24,7 +24,6 @@ import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.Server; import org.apache.hadoop.hbase.executor.EventType; import org.apache.hadoop.hbase.regionserver.RegionServerServices; -import org.apache.hadoop.hbase.coordination.OpenRegionCoordination; /** * Handles opening of a meta region on a region server. @@ -35,9 +34,7 @@ import org.apache.hadoop.hbase.coordination.OpenRegionCoordination; public class OpenMetaHandler extends OpenRegionHandler { public OpenMetaHandler(final Server server, final RegionServerServices rsServices, HRegionInfo regionInfo, - final HTableDescriptor htd, OpenRegionCoordination coordination, - OpenRegionCoordination.OpenRegionDetails ord) { - super(server, rsServices, regionInfo, htd, EventType.M_RS_OPEN_META, - coordination, ord); + final HTableDescriptor htd) { + super(server, rsServices, regionInfo, htd, EventType.M_RS_OPEN_META); } } http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java index ef30f08..20e0970 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java @@ -27,7 +27,6 @@ import org.apache.hadoop.classification.InterfaceAudience; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.Server; -import org.apache.hadoop.hbase.coordination.OpenRegionCoordination; import org.apache.hadoop.hbase.executor.EventHandler; import org.apache.hadoop.hbase.executor.EventType; import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; @@ -35,7 +34,6 @@ 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.util.CancelableProgressable; -import org.apache.hadoop.hbase.util.ConfigUtil; /** * Handles opening of a region on a region server. * <p> @@ -50,30 +48,19 @@ public class OpenRegionHandler extends EventHandler { private final HRegionInfo regionInfo; private final HTableDescriptor htd; - private OpenRegionCoordination coordination; - private OpenRegionCoordination.OpenRegionDetails ord; - - private final boolean useZKForAssignment; - public OpenRegionHandler(final Server server, final RegionServerServices rsServices, HRegionInfo regionInfo, - HTableDescriptor htd, OpenRegionCoordination coordination, - OpenRegionCoordination.OpenRegionDetails ord) { - this(server, rsServices, regionInfo, htd, EventType.M_RS_OPEN_REGION, - coordination, ord); + HTableDescriptor htd) { + this(server, rsServices, regionInfo, htd, EventType.M_RS_OPEN_REGION); } protected OpenRegionHandler(final Server server, final RegionServerServices rsServices, final HRegionInfo regionInfo, - final HTableDescriptor htd, EventType eventType, - OpenRegionCoordination coordination, OpenRegionCoordination.OpenRegionDetails ord) { + final HTableDescriptor htd, EventType eventType) { super(server, eventType); this.rsServices = rsServices; this.regionInfo = regionInfo; this.htd = htd; - this.coordination = coordination; - this.ord = ord; - useZKForAssignment = ConfigUtil.useZKForAssignment(server.getConfiguration()); } public HRegionInfo getRegionInfo() { @@ -83,7 +70,6 @@ public class OpenRegionHandler extends EventHandler { @Override public void process() throws IOException { boolean openSuccessful = false; - boolean transitionedToOpening = false; final String regionName = regionInfo.getRegionNameAsString(); HRegion region = null; @@ -93,10 +79,9 @@ public class OpenRegionHandler extends EventHandler { } final String encodedName = regionInfo.getEncodedName(); - // 3 different difficult situations can occur + // 2 different difficult situations can occur // 1) The opening was cancelled. This is an expected situation - // 2) The region was hijacked, we no longer have the znode - // 3) The region is now marked as online while we're suppose to open. This would be a bug. + // 2) The region is now marked as online while we're suppose to open. This would be a bug. // Check that this region is not already online if (this.rsServices.getFromOnlineRegions(encodedName) != null) { @@ -106,21 +91,13 @@ public class OpenRegionHandler extends EventHandler { return; } - // Check that we're still supposed to open the region and transition. + // Check that we're still supposed to open the region. // If fails, just return. Someone stole the region from under us. - // Calling transitionFromOfflineToOpening initializes this.version. if (!isRegionStillOpening()){ LOG.error("Region " + encodedName + " opening cancelled"); return; } - if (useZKForAssignment - && !coordination.transitionFromOfflineToOpening(regionInfo, ord)) { - LOG.warn("Region was hijacked? Opening cancelled for encodedName=" + encodedName); - // This is a desperate attempt: the znode is unlikely to be ours. But we can't do more. - return; - } - transitionedToOpening = true; // Open region. After a successful open, failures in subsequent // processing needs to do a close as part of cleanup. region = openRegion(); @@ -128,37 +105,15 @@ public class OpenRegionHandler extends EventHandler { return; } - boolean failed = true; - if (!useZKForAssignment || - coordination.tickleOpening(ord, regionInfo, rsServices, "post_region_open")) { - if (updateMeta(region)) { - failed = false; - } - } - if (failed || this.server.isStopped() || + if (!updateMeta(region) || this.server.isStopped() || this.rsServices.isStopping()) { return; } - if (!isRegionStillOpening() || - (useZKForAssignment && !coordination.transitionToOpened(region, ord))) { - // If we fail to transition to opened, it's because of one of two cases: - // (a) we lost our ZK lease - // OR (b) someone else opened the region before us - // OR (c) someone cancelled the open - // In all cases, we try to transition to failed_open to be safe. + if (!isRegionStillOpening()) { return; } - // We have a znode in the opened state now. We can't really delete it as the master job. - // Transitioning to failed open would create a race condition if the master has already - // acted the transition to opened. - // Cancelling the open is dangerous, because we would have a state where the master thinks - // the region is opened while the region is actually closed. It is a dangerous state - // to be in. For this reason, from now on, we're not going back. There is a message in the - // finally close to let the admin knows where we stand. - - // Successful region open, and add it to OnlineRegions this.rsServices.addToOnlineRegions(region); openSuccessful = true; @@ -166,12 +121,10 @@ public class OpenRegionHandler extends EventHandler { // Done! Successful region open LOG.debug("Opened " + regionName + " on " + this.server.getServerName()); - - } finally { // Do all clean up here if (!openSuccessful) { - doCleanUpOnFailedOpen(region, transitionedToOpening, ord); + doCleanUpOnFailedOpen(region); } final Boolean current = this.rsServices.getRegionsInTransitionInRS(). remove(this.regionInfo.getEncodedNameAsBytes()); @@ -180,9 +133,7 @@ public class OpenRegionHandler extends EventHandler { // A better solution would be to not have any race condition. // this.rsServices.getRegionsInTransitionInRS().remove( // this.regionInfo.getEncodedNameAsBytes(), Boolean.TRUE); - // would help, but we would still have a consistency issue to manage with - // 1) this.rsServices.addToOnlineRegions(region); - // 2) the ZK state. + // would help. if (openSuccessful) { if (current == null) { // Should NEVER happen, but let's be paranoid. LOG.error("Bad state: we've just opened a region that was NOT in transition. Region=" @@ -198,29 +149,14 @@ public class OpenRegionHandler extends EventHandler { } } - private void doCleanUpOnFailedOpen(HRegion region, boolean transitionedToOpening, - OpenRegionCoordination.OpenRegionDetails ord) + private void doCleanUpOnFailedOpen(HRegion region) throws IOException { - if (transitionedToOpening) { - try { - if (region != null) { - cleanupFailedOpen(region); - } - } finally { - if (!useZKForAssignment) { - rsServices.reportRegionStateTransition(TransitionCode.FAILED_OPEN, regionInfo); - } else { - // Even if cleanupFailed open fails we need to do this transition - // See HBASE-7698 - coordination.tryTransitionFromOpeningToFailedOpen(regionInfo, ord); - } + try { + if (region != null) { + cleanupFailedOpen(region); } - } else if (!useZKForAssignment) { + } finally { rsServices.reportRegionStateTransition(TransitionCode.FAILED_OPEN, regionInfo); - } else { - // If still transition to OPENING is not done, we need to transition znode - // to FAILED_OPEN - coordination.tryTransitionFromOfflineToFailedOpen(this.rsServices, regionInfo, ord); } } @@ -244,8 +180,6 @@ public class OpenRegionHandler extends EventHandler { // Post open deploy task: // meta => update meta location in ZK // other region => update meta - // It could fail if ZK/meta is not available and - // the update runs out of retries. long now = System.currentTimeMillis(); long lastUpdate = now; boolean tickleOpening = true; @@ -255,10 +189,6 @@ public class OpenRegionHandler extends EventHandler { if (elapsed > 120000) { // 2 minutes, no need to tickleOpening too often // Only tickle OPENING if postOpenDeployTasks is taking some time. lastUpdate = now; - if (useZKForAssignment) { - tickleOpening = coordination.tickleOpening( - ord, regionInfo, rsServices, "post_open_deploy"); - } } synchronized (signaller) { try { @@ -356,11 +286,6 @@ public class OpenRegionHandler extends EventHandler { this.rsServices, new CancelableProgressable() { public boolean progress() { - if (useZKForAssignment) { - // if tickle failed, we need to cancel opening region. - return coordination.tickleOpening(ord, regionInfo, - rsServices, "open_region_progress"); - } if (!isRegionStillOpening()) { LOG.warn("Open region aborted since it isn't opening any more"); return false; http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ConfigUtil.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ConfigUtil.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ConfigUtil.java deleted file mode 100644 index 0f9b713..0000000 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/ConfigUtil.java +++ /dev/null @@ -1,33 +0,0 @@ -/** - * 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 org.apache.hadoop.classification.InterfaceAudience; -import org.apache.hadoop.conf.Configuration; - -/** - * Some configuration related utilities - */ [email protected] -public class ConfigUtil { - - public static boolean useZKForAssignment(Configuration conf) { - // To change the default, please also update ZooKeeperWatcher.java - return conf.getBoolean("hbase.assignment.usezk", false); - } -} http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java index 84ffec8..960d69c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsckRepair.java @@ -147,12 +147,13 @@ public class HBaseFsckRepair { * Contacts a region server and waits up to hbase.hbck.close.timeout ms * (default 120s) to close the region. This bypasses the active hmaster. */ + @SuppressWarnings("deprecation") public static void closeRegionSilentlyAndWait(Admin admin, ServerName server, HRegionInfo region) throws IOException, InterruptedException { HConnection connection = admin.getConnection(); AdminService.BlockingInterface rs = connection.getAdmin(server); try { - ProtobufUtil.closeRegion(rs, server, region.getRegionName(), false); + ProtobufUtil.closeRegion(rs, server, region.getRegionName()); } catch (IOException e) { LOG.warn("Exception when closing region: " + region.getRegionNameAsString(), e); } http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/data/TestNamespaceUpgrade.tgz ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/data/TestNamespaceUpgrade.tgz b/hbase-server/src/test/data/TestNamespaceUpgrade.tgz deleted file mode 100644 index db6e9c3..0000000 Binary files a/hbase-server/src/test/data/TestNamespaceUpgrade.tgz and /dev/null differ http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java index c67f3f8..7aeb778 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java @@ -99,7 +99,6 @@ import org.apache.hadoop.hbase.util.RetryCounter; import org.apache.hadoop.hbase.util.Threads; import org.apache.hadoop.hbase.zookeeper.EmptyWatcher; import org.apache.hadoop.hbase.zookeeper.MiniZooKeeperCluster; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; import org.apache.hadoop.hbase.zookeeper.ZKConfig; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.apache.hadoop.hdfs.DFSClient; @@ -109,8 +108,6 @@ import org.apache.hadoop.hdfs.server.namenode.EditLogFileOutputStream; import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.MiniMRCluster; import org.apache.hadoop.mapred.TaskLog; -import org.apache.zookeeper.KeeperException; -import org.apache.zookeeper.KeeperException.NodeExistsException; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.ZooKeeper.States; @@ -1470,6 +1467,7 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility { /** * Modify a table, synchronous. Waiting logic similar to that of {@code admin.rb#alter_status}. */ + @SuppressWarnings("serial") public static void modifyTableSync(Admin admin, HTableDescriptor desc) throws IOException, InterruptedException { admin.modifyTable(desc.getTableName(), desc); @@ -3009,30 +3007,6 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility { return zkw; } - /** - * Creates a znode with OPENED state. - * @param TEST_UTIL - * @param region - * @param serverName - * @return - * @throws IOException - * @throws org.apache.hadoop.hbase.ZooKeeperConnectionException - * @throws KeeperException - * @throws NodeExistsException - */ - public static ZooKeeperWatcher createAndForceNodeToOpenedState( - HBaseTestingUtility TEST_UTIL, HRegion region, - ServerName serverName) throws ZooKeeperConnectionException, - IOException, KeeperException, NodeExistsException { - ZooKeeperWatcher zkw = getZooKeeperWatcher(TEST_UTIL); - ZKAssign.createNodeOffline(zkw, region.getRegionInfo(), serverName); - int version = ZKAssign.transitionNodeOpening(zkw, region - .getRegionInfo(), serverName); - ZKAssign.transitionNodeOpened(zkw, region.getRegionInfo(), serverName, - version); - return zkw; - } - public static void assertKVListsEqual(String additionalMsg, final List<? extends Cell> expected, final List<? extends Cell> actual) { @@ -3441,6 +3415,16 @@ public class HBaseTestingUtility extends HBaseCommonTestingUtility { } /** + * Wait until no regions in transition. + * @param timeout How long to wait. + * @throws Exception + */ + public void waitUntilNoRegionsInTransition( + final long timeout) throws Exception { + waitFor(timeout, predicateNoRegionsInTransition()); + } + + /** * Create a set of column descriptors with the combination of compression, * encoding, bloom codecs available. * @return the list of column descriptors http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/TestDrainingServer.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestDrainingServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestDrainingServer.java deleted file mode 100644 index db087ff..0000000 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestDrainingServer.java +++ /dev/null @@ -1,305 +0,0 @@ -/** - * 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; - - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.hbase.coordination.ZkCoordinatedStateManager; -import org.apache.hadoop.hbase.executor.EventType; -import org.apache.hadoop.hbase.executor.ExecutorService; -import org.apache.hadoop.hbase.executor.ExecutorType; -import org.apache.hadoop.hbase.master.AssignmentManager; -import org.apache.hadoop.hbase.master.HMaster; -import org.apache.hadoop.hbase.master.LoadBalancer; -import org.apache.hadoop.hbase.master.RegionPlan; -import org.apache.hadoop.hbase.master.RegionState; -import org.apache.hadoop.hbase.master.ServerManager; -import org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory; -import org.apache.hadoop.hbase.regionserver.RegionOpeningState; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.mockito.Mockito; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; -import java.util.Set; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; - - -/** - * Test the draining servers feature. - */ -@Category(MediumTests.class) -public class TestDrainingServer { - private static final Log LOG = LogFactory.getLog(TestDrainingServer.class); - private static final HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility(); - private Abortable abortable = new Abortable() { - @Override - public boolean isAborted() { - return false; - } - - @Override - public void abort(String why, Throwable e) { - } - }; - - @AfterClass - public static void afterClass() throws Exception { - TEST_UTIL.shutdownMiniZKCluster(); - } - - @BeforeClass - public static void beforeClass() throws Exception { - TEST_UTIL.getConfiguration().setBoolean("hbase.assignment.usezk", true); - TEST_UTIL.startMiniZKCluster(); - } - - @Test - public void testAssignmentManagerDoesntUseDrainingServer() throws Exception { - AssignmentManager am; - Configuration conf = TEST_UTIL.getConfiguration(); - final HMaster master = Mockito.mock(HMaster.class); - final Server server = Mockito.mock(Server.class); - final ServerManager serverManager = Mockito.mock(ServerManager.class); - final ServerName SERVERNAME_A = ServerName.valueOf("mockserver_a.org", 1000, 8000); - final ServerName SERVERNAME_B = ServerName.valueOf("mockserver_b.org", 1001, 8000); - LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(conf); - final HRegionInfo REGIONINFO = new HRegionInfo(TableName.valueOf("table_test"), - HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW); - - ZooKeeperWatcher zkWatcher = new ZooKeeperWatcher(TEST_UTIL.getConfiguration(), - "zkWatcher-Test", abortable, true); - - Map<ServerName, ServerLoad> onlineServers = new HashMap<ServerName, ServerLoad>(); - - onlineServers.put(SERVERNAME_A, ServerLoad.EMPTY_SERVERLOAD); - onlineServers.put(SERVERNAME_B, ServerLoad.EMPTY_SERVERLOAD); - - Mockito.when(server.getConfiguration()).thenReturn(conf); - Mockito.when(server.getServerName()).thenReturn(ServerName.valueOf("masterMock,1,1")); - Mockito.when(server.getZooKeeper()).thenReturn(zkWatcher); - - CoordinatedStateManager cp = new ZkCoordinatedStateManager(); - cp.initialize(server); - cp.start(); - - Mockito.when(server.getCoordinatedStateManager()).thenReturn(cp); - - Mockito.when(serverManager.getOnlineServers()).thenReturn(onlineServers); - Mockito.when(serverManager.getOnlineServersList()) - .thenReturn(new ArrayList<ServerName>(onlineServers.keySet())); - - Mockito.when(serverManager.createDestinationServersList()) - .thenReturn(new ArrayList<ServerName>(onlineServers.keySet())); - Mockito.when(serverManager.createDestinationServersList(null)) - .thenReturn(new ArrayList<ServerName>(onlineServers.keySet())); - - for (ServerName sn : onlineServers.keySet()) { - Mockito.when(serverManager.isServerOnline(sn)).thenReturn(true); - Mockito.when(serverManager.sendRegionClose(sn, REGIONINFO, -1)).thenReturn(true); - Mockito.when(serverManager.sendRegionClose(sn, REGIONINFO, -1, null, false)).thenReturn(true); - Mockito.when(serverManager.sendRegionOpen(sn, REGIONINFO, -1, new ArrayList<ServerName>())) - .thenReturn(RegionOpeningState.OPENED); - Mockito.when(serverManager.sendRegionOpen(sn, REGIONINFO, -1, null)) - .thenReturn(RegionOpeningState.OPENED); - Mockito.when(serverManager.addServerToDrainList(sn)).thenReturn(true); - } - - Mockito.when(master.getServerManager()).thenReturn(serverManager); - - am = new AssignmentManager(server, serverManager, - balancer, startupMasterExecutor("mockExecutorService"), null, null); - - Mockito.when(master.getAssignmentManager()).thenReturn(am); - Mockito.when(master.getZooKeeper()).thenReturn(zkWatcher); - - am.addPlan(REGIONINFO.getEncodedName(), new RegionPlan(REGIONINFO, null, SERVERNAME_A)); - - zkWatcher.registerListenerFirst(am); - - addServerToDrainedList(SERVERNAME_A, onlineServers, serverManager); - - am.assign(REGIONINFO, true); - - setRegionOpenedOnZK(zkWatcher, SERVERNAME_A, REGIONINFO); - setRegionOpenedOnZK(zkWatcher, SERVERNAME_B, REGIONINFO); - - am.waitForAssignment(REGIONINFO); - - assertTrue(am.getRegionStates().isRegionOnline(REGIONINFO)); - assertNotEquals(am.getRegionStates().getRegionServerOfRegion(REGIONINFO), SERVERNAME_A); - } - - @Test - public void testAssignmentManagerDoesntUseDrainedServerWithBulkAssign() throws Exception { - Configuration conf = TEST_UTIL.getConfiguration(); - LoadBalancer balancer = LoadBalancerFactory.getLoadBalancer(conf); - AssignmentManager am; - final HMaster master = Mockito.mock(HMaster.class); - final Server server = Mockito.mock(Server.class); - final ServerManager serverManager = Mockito.mock(ServerManager.class); - final ServerName SERVERNAME_A = ServerName.valueOf("mockserverbulk_a.org", 1000, 8000); - final ServerName SERVERNAME_B = ServerName.valueOf("mockserverbulk_b.org", 1001, 8000); - final ServerName SERVERNAME_C = ServerName.valueOf("mockserverbulk_c.org", 1002, 8000); - final ServerName SERVERNAME_D = ServerName.valueOf("mockserverbulk_d.org", 1003, 8000); - final ServerName SERVERNAME_E = ServerName.valueOf("mockserverbulk_e.org", 1004, 8000); - final Map<HRegionInfo, ServerName> bulk = new HashMap<HRegionInfo, ServerName>(); - - Set<ServerName> bunchServersAssigned = new HashSet<ServerName>(); - - HRegionInfo REGIONINFO_A = new HRegionInfo(TableName.valueOf("table_A"), - HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW); - HRegionInfo REGIONINFO_B = new HRegionInfo(TableName.valueOf("table_B"), - HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW); - HRegionInfo REGIONINFO_C = new HRegionInfo(TableName.valueOf("table_C"), - HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW); - HRegionInfo REGIONINFO_D = new HRegionInfo(TableName.valueOf("table_D"), - HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW); - HRegionInfo REGIONINFO_E = new HRegionInfo(TableName.valueOf("table_E"), - HConstants.EMPTY_START_ROW, HConstants.EMPTY_START_ROW); - - Map<ServerName, ServerLoad> onlineServers = new HashMap<ServerName, ServerLoad>(); - List<ServerName> drainedServers = new ArrayList<ServerName>(); - - onlineServers.put(SERVERNAME_A, ServerLoad.EMPTY_SERVERLOAD); - onlineServers.put(SERVERNAME_B, ServerLoad.EMPTY_SERVERLOAD); - onlineServers.put(SERVERNAME_C, ServerLoad.EMPTY_SERVERLOAD); - onlineServers.put(SERVERNAME_D, ServerLoad.EMPTY_SERVERLOAD); - onlineServers.put(SERVERNAME_E, ServerLoad.EMPTY_SERVERLOAD); - - bulk.put(REGIONINFO_A, SERVERNAME_A); - bulk.put(REGIONINFO_B, SERVERNAME_B); - bulk.put(REGIONINFO_C, SERVERNAME_C); - bulk.put(REGIONINFO_D, SERVERNAME_D); - bulk.put(REGIONINFO_E, SERVERNAME_E); - - ZooKeeperWatcher zkWatcher = new ZooKeeperWatcher(TEST_UTIL.getConfiguration(), - "zkWatcher-BulkAssignTest", abortable, true); - - Mockito.when(server.getConfiguration()).thenReturn(conf); - Mockito.when(server.getServerName()).thenReturn(ServerName.valueOf("masterMock,1,1")); - Mockito.when(server.getZooKeeper()).thenReturn(zkWatcher); - - CoordinatedStateManager cp = new ZkCoordinatedStateManager(); - cp.initialize(server); - cp.start(); - - Mockito.when(server.getCoordinatedStateManager()).thenReturn(cp); - - Mockito.when(serverManager.getOnlineServers()).thenReturn(onlineServers); - Mockito.when(serverManager.getOnlineServersList()).thenReturn( - new ArrayList<ServerName>(onlineServers.keySet())); - - Mockito.when(serverManager.createDestinationServersList()).thenReturn( - new ArrayList<ServerName>(onlineServers.keySet())); - Mockito.when(serverManager.createDestinationServersList(null)).thenReturn( - new ArrayList<ServerName>(onlineServers.keySet())); - - for (Entry<HRegionInfo, ServerName> entry : bulk.entrySet()) { - Mockito.when(serverManager.isServerOnline(entry.getValue())).thenReturn(true); - Mockito.when(serverManager.sendRegionClose(entry.getValue(), - entry.getKey(), -1)).thenReturn(true); - Mockito.when(serverManager.sendRegionOpen(entry.getValue(), - entry.getKey(), -1, null)).thenReturn(RegionOpeningState.OPENED); - Mockito.when(serverManager.addServerToDrainList(entry.getValue())).thenReturn(true); - } - - Mockito.when(master.getServerManager()).thenReturn(serverManager); - - drainedServers.add(SERVERNAME_A); - drainedServers.add(SERVERNAME_B); - drainedServers.add(SERVERNAME_C); - drainedServers.add(SERVERNAME_D); - - am = new AssignmentManager(server, serverManager, - balancer, startupMasterExecutor("mockExecutorServiceBulk"), null, null); - - Mockito.when(master.getAssignmentManager()).thenReturn(am); - - zkWatcher.registerListener(am); - - for (ServerName drained : drainedServers) { - addServerToDrainedList(drained, onlineServers, serverManager); - } - - am.assign(bulk); - - Map<String, RegionState> regionsInTransition = am.getRegionStates().getRegionsInTransition(); - for (Entry<String, RegionState> entry : regionsInTransition.entrySet()) { - setRegionOpenedOnZK(zkWatcher, entry.getValue().getServerName(), - entry.getValue().getRegion()); - } - - am.waitForAssignment(REGIONINFO_A); - am.waitForAssignment(REGIONINFO_B); - am.waitForAssignment(REGIONINFO_C); - am.waitForAssignment(REGIONINFO_D); - am.waitForAssignment(REGIONINFO_E); - - Map<HRegionInfo, ServerName> regionAssignments = am.getRegionStates().getRegionAssignments(); - for (Entry<HRegionInfo, ServerName> entry : regionAssignments.entrySet()) { - LOG.info("Region Assignment: " - + entry.getKey().getRegionNameAsString() + " Server: " + entry.getValue()); - bunchServersAssigned.add(entry.getValue()); - } - - for (ServerName sn : drainedServers) { - assertFalse(bunchServersAssigned.contains(sn)); - } - } - - private void addServerToDrainedList(ServerName serverName, - Map<ServerName, ServerLoad> onlineServers, ServerManager serverManager) { - onlineServers.remove(serverName); - List<ServerName> availableServers = new ArrayList<ServerName>(onlineServers.keySet()); - Mockito.when(serverManager.createDestinationServersList()).thenReturn(availableServers); - Mockito.when(serverManager.createDestinationServersList(null)).thenReturn(availableServers); - } - - private void setRegionOpenedOnZK(final ZooKeeperWatcher zkWatcher, final ServerName serverName, - HRegionInfo hregionInfo) throws Exception { - int version = ZKAssign.getVersion(zkWatcher, hregionInfo); - int versionTransition = ZKAssign.transitionNode(zkWatcher, - hregionInfo, serverName, EventType.M_ZK_REGION_OFFLINE, - EventType.RS_ZK_REGION_OPENING, version); - ZKAssign.transitionNodeOpened(zkWatcher, hregionInfo, serverName, versionTransition); - } - - private ExecutorService startupMasterExecutor(final String name) { - ExecutorService executor = new ExecutorService(name); - executor.startExecutorService(ExecutorType.MASTER_OPEN_REGION, 3); - executor.startExecutorService(ExecutorType.MASTER_CLOSE_REGION, 3); - executor.startExecutorService(ExecutorType.MASTER_SERVER_OPERATIONS, 3); - executor.startExecutorService(ExecutorType.MASTER_META_SERVER_OPERATIONS, 3); - return executor; - } -} http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/TestIOFencing.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestIOFencing.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestIOFencing.java index 1e3e3af..990de0f 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestIOFencing.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestIOFencing.java @@ -244,7 +244,7 @@ public class TestIOFencing { c.setClass(HConstants.REGION_IMPL, regionClass, HRegion.class); c.setBoolean("dfs.support.append", true); // Encourage plenty of flushes - c.setLong("hbase.hregion.memstore.flush.size", 200000); + c.setLong("hbase.hregion.memstore.flush.size", 100000); c.set(HConstants.HBASE_REGION_SPLIT_POLICY_KEY, ConstantSizeRegionSplitPolicy.class.getName()); // Only run compaction when we tell it to c.setInt("hbase.hstore.compaction.min",1); http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java index 1448bf2..359bb0a 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestMetaTableAccessor.java @@ -26,12 +26,12 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.List; import java.util.Random; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Get; -import org.apache.hadoop.hbase.client.HBaseAdmin; import org.apache.hadoop.hbase.client.HConnection; import org.apache.hadoop.hbase.client.HConnectionManager; import org.apache.hadoop.hbase.client.HTable; @@ -48,6 +48,7 @@ import org.junit.experimental.categories.Category; * Test {@link org.apache.hadoop.hbase.MetaTableAccessor}. */ @Category(MediumTests.class) +@SuppressWarnings("deprecation") public class TestMetaTableAccessor { private static final Log LOG = LogFactory.getLog(TestMetaTableAccessor.class); private static final HBaseTestingUtility UTIL = new HBaseTestingUtility(); http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java index e65430b..9d502d0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/TestZooKeeper.java @@ -50,7 +50,6 @@ import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.FSUtils; import org.apache.hadoop.hbase.util.Threads; import org.apache.hadoop.hbase.zookeeper.EmptyWatcher; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; import org.apache.hadoop.hbase.zookeeper.ZKConfig; import org.apache.hadoop.hbase.zookeeper.ZKUtil; import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; @@ -500,8 +499,7 @@ public class TestZooKeeper { HTableDescriptor htd = new HTableDescriptor(TableName.valueOf(tableName)); htd.addFamily(new HColumnDescriptor(HConstants.CATALOG_FAMILY)); admin.createTable(htd, SPLIT_KEYS); - ZooKeeperWatcher zooKeeperWatcher = HBaseTestingUtility.getZooKeeperWatcher(TEST_UTIL); - ZKAssign.blockUntilNoRIT(zooKeeperWatcher); + TEST_UTIL.waitUntilNoRegionsInTransition(60000); m.getZooKeeper().close(); MockLoadBalancer.retainAssignCalled = false; m.abort("Test recovery from zk session expired", @@ -524,8 +522,7 @@ public class TestZooKeeper { * RS goes down. */ @Test(timeout = 300000) - public void testLogSplittingAfterMasterRecoveryDueToZKExpiry() throws IOException, - KeeperException, InterruptedException { + public void testLogSplittingAfterMasterRecoveryDueToZKExpiry() throws Exception { MiniHBaseCluster cluster = TEST_UTIL.getHBaseCluster(); cluster.startRegionServer(); HMaster m = cluster.getMaster(); @@ -541,8 +538,7 @@ public class TestZooKeeper { HColumnDescriptor hcd = new HColumnDescriptor("col"); htd.addFamily(hcd); admin.createTable(htd, SPLIT_KEYS); - ZooKeeperWatcher zooKeeperWatcher = HBaseTestingUtility.getZooKeeperWatcher(TEST_UTIL); - ZKAssign.blockUntilNoRIT(zooKeeperWatcher); + TEST_UTIL.waitUntilNoRegionsInTransition(60000); table = new HTable(TEST_UTIL.getConfiguration(), tableName); Put p; int numberOfPuts; http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicasClient.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicasClient.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicasClient.java index bc3a1f8..02fd1c4 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicasClient.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestReplicasClient.java @@ -19,6 +19,18 @@ package org.apache.hadoop.hbase.client; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicLong; +import java.util.concurrent.atomic.AtomicReference; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; @@ -43,7 +55,6 @@ import org.apache.hadoop.hbase.regionserver.RegionScanner; import org.apache.hadoop.hbase.regionserver.StorefileRefresherChore; import org.apache.hadoop.hbase.regionserver.TestRegionServerNoMaster; import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; import org.apache.zookeeper.KeeperException; import org.junit.After; import org.junit.AfterClass; @@ -53,23 +64,12 @@ import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.categories.Category; -import java.io.IOException; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Random; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.concurrent.atomic.AtomicLong; -import java.util.concurrent.atomic.AtomicReference; - /** * Tests for region replicas. Sad that we cannot isolate these without bringing up a whole * cluster. See {@link org.apache.hadoop.hbase.regionserver.TestRegionServerNoMaster}. */ @Category(MediumTests.class) +@SuppressWarnings("deprecation") public class TestReplicasClient { private static final Log LOG = LogFactory.getLog(TestReplicasClient.class); @@ -187,11 +187,13 @@ public class TestReplicasClient { } catch (MasterNotRunningException ignored) { } } + ha.close(); LOG.info("Master has stopped"); } @AfterClass public static void afterClass() throws Exception { + HRegionServer.TEST_SKIP_REPORTING_TRANSITION = false; if (table != null) table.close(); HTU.shutdownMiniCluster(); } @@ -219,8 +221,6 @@ public class TestReplicasClient { closeRegion(hriPrimary); } catch (Exception ignored) { } - ZKAssign.deleteNodeFailSilent(HTU.getZooKeeperWatcher(), hriPrimary); - ZKAssign.deleteNodeFailSilent(HTU.getZooKeeperWatcher(), hriSecondary); HTU.getHBaseAdmin().getConnection().clearRegionCache(); } @@ -233,10 +233,9 @@ public class TestReplicasClient { try { if (isRegionOpened(hri)) return; } catch (Exception e){} - ZKAssign.createNodeOffline(HTU.getZooKeeperWatcher(), hri, getRS().getServerName()); // first version is '0' AdminProtos.OpenRegionRequest orr = RequestConverter.buildOpenRegionRequest( - getRS().getServerName(), hri, 0, null, null); + getRS().getServerName(), hri, null, null); AdminProtos.OpenRegionResponse responseOpen = getRS().getRSRpcServices().openRegion(null, orr); Assert.assertEquals(responseOpen.getOpeningStateCount(), 1); Assert.assertEquals(responseOpen.getOpeningState(0), @@ -245,27 +244,19 @@ public class TestReplicasClient { } private void closeRegion(HRegionInfo hri) throws Exception { - ZKAssign.createNodeClosing(HTU.getZooKeeperWatcher(), hri, getRS().getServerName()); - AdminProtos.CloseRegionRequest crr = RequestConverter.buildCloseRegionRequest( - getRS().getServerName(), hri.getEncodedName(), true); + getRS().getServerName(), hri.getEncodedName()); AdminProtos.CloseRegionResponse responseClose = getRS() .getRSRpcServices().closeRegion(null, crr); Assert.assertTrue(responseClose.getClosed()); checkRegionIsClosed(hri.getEncodedName()); - - ZKAssign.deleteClosedNode(HTU.getZooKeeperWatcher(), hri.getEncodedName(), null); } private void checkRegionIsOpened(HRegionInfo hri) throws Exception { - while (!getRS().getRegionsInTransitionInRS().isEmpty()) { Thread.sleep(1); } - - Assert.assertTrue( - ZKAssign.deleteOpenedNode(HTU.getZooKeeperWatcher(), hri.getEncodedName(), null)); } private boolean isRegionOpened(HRegionInfo hri) throws Exception { http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java index 380b337..a7b3319 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestScannersFromClientSide.java @@ -40,10 +40,7 @@ import org.apache.hadoop.hbase.master.RegionStates; import org.apache.hadoop.hbase.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.util.Bytes; -import org.apache.hadoop.hbase.util.ConfigUtil; import org.apache.hadoop.hbase.util.EnvironmentEdgeManager; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -474,7 +471,7 @@ public class TestScannersFromClientSide { int i = cluster.getServerWith(regionName); HRegionServer rs = cluster.getRegionServer(i); ProtobufUtil.closeRegion( - rs.getRSRpcServices(), rs.getServerName(), regionName, false); + rs.getRSRpcServices(), rs.getServerName(), regionName); long startTime = EnvironmentEdgeManager.currentTimeMillis(); long timeOut = 300000; while (true) { @@ -487,27 +484,19 @@ public class TestScannersFromClientSide { } // Now open the region again. - ZooKeeperWatcher zkw = TEST_UTIL.getZooKeeperWatcher(); - try { - HMaster master = cluster.getMaster(); - RegionStates states = master.getAssignmentManager().getRegionStates(); - states.regionOffline(hri); - states.updateRegionState(hri, State.OPENING); - if (ConfigUtil.useZKForAssignment(TEST_UTIL.getConfiguration())) { - ZKAssign.createNodeOffline(zkw, hri, loc.getServerName()); - } - ProtobufUtil.openRegion(rs.getRSRpcServices(), rs.getServerName(), hri); - startTime = EnvironmentEdgeManager.currentTimeMillis(); - while (true) { - if (rs.getOnlineRegion(regionName) != null) { - break; - } - assertTrue("Timed out in open the testing region", - EnvironmentEdgeManager.currentTimeMillis() < startTime + timeOut); - Thread.sleep(500); + HMaster master = cluster.getMaster(); + RegionStates states = master.getAssignmentManager().getRegionStates(); + states.regionOffline(hri); + states.updateRegionState(hri, State.OPENING); + ProtobufUtil.openRegion(rs.getRSRpcServices(), rs.getServerName(), hri); + startTime = EnvironmentEdgeManager.currentTimeMillis(); + while (true) { + if (rs.getOnlineRegion(regionName) != null) { + break; } - } finally { - ZKAssign.deleteNodeFailSilent(zkw, hri); + assertTrue("Timed out in open the testing region", + EnvironmentEdgeManager.currentTimeMillis() < startTime + timeOut); + Thread.sleep(500); } // c0:0, c1:1 http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java index 0ceb953..2b1f6f6 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/io/encoding/TestChangingEncoding.java @@ -45,7 +45,6 @@ import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.regionserver.HRegionServer; import org.apache.hadoop.hbase.util.Bytes; import org.apache.hadoop.hbase.util.Threads; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; @@ -194,7 +193,7 @@ public class TestChangingEncoding { // wait for regions out of transition. Otherwise, for online // encoding change, verification phase may be flaky because // regions could be still in transition. - ZKAssign.blockUntilNoRIT(TEST_UTIL.getZooKeeperWatcher()); + TEST_UTIL.waitUntilNoRegionsInTransition(TIMEOUT_MS); } @Test(timeout=TIMEOUT_MS) http://git-wip-us.apache.org/repos/asf/hbase/blob/17dff681/hbase-server/src/test/java/org/apache/hadoop/hbase/master/Mocking.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/Mocking.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/Mocking.java deleted file mode 100644 index 10127c8..0000000 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/Mocking.java +++ /dev/null @@ -1,110 +0,0 @@ -/** - * 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.assertNotSame; - -import org.apache.hadoop.hbase.exceptions.DeserializationException; -import org.apache.hadoop.hbase.HRegionInfo; -import org.apache.hadoop.hbase.RegionTransition; -import org.apache.hadoop.hbase.ServerName; -import org.apache.hadoop.hbase.executor.EventType; -import org.apache.hadoop.hbase.master.RegionState.State; -import org.apache.hadoop.hbase.zookeeper.ZKAssign; -import org.apache.hadoop.hbase.zookeeper.ZKUtil; -import org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher; -import org.apache.zookeeper.KeeperException; - -/** - * Package scoped mocking utility. - */ -public class Mocking { - - static void waitForRegionFailedToCloseAndSetToPendingClose( - AssignmentManager am, HRegionInfo hri) throws InterruptedException { - // Since region server is fake, sendRegionClose will fail, and closing - // region will fail. For testing purpose, moving it back to pending close - boolean wait = true; - while (wait) { - RegionState state = am.getRegionStates().getRegionState(hri); - if (state != null && state.isFailedClose()){ - am.getRegionStates().updateRegionState(hri, State.PENDING_CLOSE); - wait = false; - } else { - Thread.sleep(1); - } - } - } - - static void waitForRegionPendingOpenInRIT(AssignmentManager am, String encodedName) - throws InterruptedException { - // We used to do a check like this: - //!Mocking.verifyRegionState(this.watcher, REGIONINFO, EventType.M_ZK_REGION_OFFLINE)) { - // There is a race condition with this: because we may do the transition to - // RS_ZK_REGION_OPENING before the RIT is internally updated. We need to wait for the - // RIT to be as we need it to be instead. This cannot happen in a real cluster as we - // update the RIT before sending the openRegion request. - - boolean wait = true; - while (wait) { - RegionState state = am.getRegionStates() - .getRegionsInTransition().get(encodedName); - if (state != null && state.isPendingOpen()){ - wait = false; - } else { - Thread.sleep(1); - } - } - } - - /** - * Verifies that the specified region is in the specified state in ZooKeeper. - * <p> - * Returns true if region is in transition and in the specified state in - * ZooKeeper. Returns false if the region does not exist in ZK or is in - * a different state. - * <p> - * Method synchronizes() with ZK so will yield an up-to-date result but is - * a slow read. - * @param zkw - * @param region - * @param expectedState - * @return true if region exists and is in expected state - * @throws DeserializationException - */ - static boolean verifyRegionState(ZooKeeperWatcher zkw, HRegionInfo region, EventType expectedState) - throws KeeperException, DeserializationException { - String encoded = region.getEncodedName(); - - String node = ZKAssign.getNodeName(zkw, encoded); - zkw.sync(node); - - // Read existing data of the node - byte [] existingBytes = null; - try { - existingBytes = ZKUtil.getDataAndWatch(zkw, node); - } catch (KeeperException.NoNodeException nne) { - return false; - } catch (KeeperException e) { - throw e; - } - if (existingBytes == null) return false; - RegionTransition rt = RegionTransition.parseFrom(existingBytes); - return rt.getEventType().equals(expectedState); - } -}
