HBASE-4153 apply the correct patch - v4

git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1173811 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Zhihong Yu 2011-09-21 19:48:38 +00:00
parent 7e6a6538b4
commit 76ba002ef7
8 changed files with 22 additions and 45 deletions

View File

@ -1311,6 +1311,8 @@ public class HBaseAdmin implements Abortable, Closeable {
} }
/** /**
* Tries to assign a region. Region could be reassigned to the same server.
*
* @param regionName * @param regionName
* Region name to assign. * Region name to assign.
* @param force * @param force

View File

@ -64,7 +64,6 @@ import org.apache.hadoop.hbase.regionserver.RegionAlreadyInTransitionException;
import org.apache.hadoop.hbase.regionserver.RegionOpeningState; import org.apache.hadoop.hbase.regionserver.RegionOpeningState;
import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException; import org.apache.hadoop.hbase.ipc.ServerNotRunningYetException;
import org.apache.hadoop.hbase.master.RegionPlan; import org.apache.hadoop.hbase.master.RegionPlan;
import org.apache.hadoop.hbase.master.AssignmentManager.RegionState.State;
import org.apache.hadoop.hbase.master.handler.ClosedRegionHandler; import org.apache.hadoop.hbase.master.handler.ClosedRegionHandler;
import org.apache.hadoop.hbase.master.handler.DisableTableHandler; import org.apache.hadoop.hbase.master.handler.DisableTableHandler;
import org.apache.hadoop.hbase.master.handler.EnableTableHandler; import org.apache.hadoop.hbase.master.handler.EnableTableHandler;
@ -164,9 +163,6 @@ public class AssignmentManager extends ZooKeeperListener {
//Thread pool executor service for timeout monitor //Thread pool executor service for timeout monitor
private java.util.concurrent.ExecutorService threadPoolExecutorService; private java.util.concurrent.ExecutorService threadPoolExecutorService;
//String to compare the RegionsAlreadyInTransition from RS
private static final String ALREADY_TRANSITIONING = "for the region we are " +
"already trying to ";
/** /**
* Constructs a new assignment manager. * Constructs a new assignment manager.
@ -1457,13 +1453,10 @@ public class AssignmentManager extends ZooKeeperListener {
if (t instanceof RemoteException) { if (t instanceof RemoteException) {
t = ((RemoteException) t).unwrapRemoteException(); t = ((RemoteException) t).unwrapRemoteException();
if (t instanceof RegionAlreadyInTransitionException) { if (t instanceof RegionAlreadyInTransitionException) {
String errorMsg = "Failed assignment of " + String errorMsg = "Failed assignment in: " + plan.getDestination()
state.getRegion().getRegionNameAsString() + " to " + + " due to " + t.getMessage();
plan.getDestination() + " as the region was already " +
extractRegionState((RegionAlreadyInTransitionException) t) +
" in the RS " +plan.getDestination();
LOG.error(errorMsg, t); LOG.error(errorMsg, t);
return; return;
} }
LOG.warn("Failed assignment of " + LOG.warn("Failed assignment of " +
state.getRegion().getRegionNameAsString() + " to " + state.getRegion().getRegionNameAsString() + " to " +
@ -1484,13 +1477,6 @@ public class AssignmentManager extends ZooKeeperListener {
} }
} }
private State extractRegionState(RegionAlreadyInTransitionException t) {
RegionState.State state = t.getMessage().contains(
ALREADY_TRANSITIONING + "OPEN") ? RegionState.State.PENDING_OPEN
: RegionState.State.PENDING_CLOSE;
return state;
}
private void debugLog(HRegionInfo region, String string) { private void debugLog(HRegionInfo region, String string) {
if (region.isMetaTable() || region.isRootRegion()) { if (region.isMetaTable() || region.isRootRegion()) {
LOG.info(string); LOG.info(string);

View File

@ -44,7 +44,6 @@ import java.util.SortedMap;
import java.util.TreeMap; import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.ConcurrentSkipListSet;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock;
@ -101,7 +100,6 @@ import org.apache.hadoop.hbase.filter.WritableByteArrayComparable;
import org.apache.hadoop.hbase.io.hfile.BlockCache; import org.apache.hadoop.hbase.io.hfile.BlockCache;
import org.apache.hadoop.hbase.io.hfile.BlockCacheColumnFamilySummary; import org.apache.hadoop.hbase.io.hfile.BlockCacheColumnFamilySummary;
import org.apache.hadoop.hbase.io.hfile.CacheStats; import org.apache.hadoop.hbase.io.hfile.CacheStats;
import org.apache.hadoop.hbase.io.hfile.LruBlockCache;
import org.apache.hadoop.hbase.ipc.CoprocessorProtocol; import org.apache.hadoop.hbase.ipc.CoprocessorProtocol;
import org.apache.hadoop.hbase.ipc.HBaseRPC; import org.apache.hadoop.hbase.ipc.HBaseRPC;
import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler; import org.apache.hadoop.hbase.ipc.HBaseRPCErrorHandler;
@ -313,13 +311,10 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
/* /*
* Strings to be used in forming the exception message for * Strings to be used in forming the exception message for
* RegionsAlreadyInTransitionException. The below strings combination * RegionsAlreadyInTransitionException.
* is used to extract the status in the master.
*/ */
private static final String ALREADY_TRANSITIONING = "for the region we are already trying to "; private static final String OPEN = "OPEN";
private static final String RECEIVED = " received "; private static final String CLOSE = "CLOSE";
private static final String OPEN = "OPEN ";
private static final String CLOSE = "CLOSE ";
/** /**
* Starts a HRegionServer at the default location * Starts a HRegionServer at the default location
@ -2367,7 +2362,7 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
public RegionOpeningState openRegion(HRegionInfo region, int versionOfOfflineNode) public RegionOpeningState openRegion(HRegionInfo region, int versionOfOfflineNode)
throws IOException { throws IOException {
checkOpen(); checkOpen();
checkIfRegionInTransition(region,OPEN); checkIfRegionInTransition(region, OPEN);
HRegion onlineRegion = this.getFromOnlineRegions(region.getEncodedName()); HRegion onlineRegion = this.getFromOnlineRegions(region.getEncodedName());
if (null != onlineRegion) { if (null != onlineRegion) {
LOG.warn("Attempted open of " + region.getEncodedName() LOG.warn("Attempted open of " + region.getEncodedName()
@ -2395,23 +2390,17 @@ public class HRegionServer implements HRegionInterface, HBaseRPCErrorHandler,
private void checkIfRegionInTransition(HRegionInfo region, private void checkIfRegionInTransition(HRegionInfo region,
String currentAction) throws RegionAlreadyInTransitionException { String currentAction) throws RegionAlreadyInTransitionException {
byte[] encodedName = region.getEncodedNameAsBytes(); byte[] encodedName = region.getEncodedNameAsBytes();
if (this.regionsInTransitionInRS.containsKey(encodedName)) { if (this.regionsInTransitionInRS.containsKey(encodedName)) {
boolean openAction = this.regionsInTransitionInRS.get(encodedName);
// The below exception message will be used in master. // The below exception message will be used in master.
throw new RegionAlreadyInTransitionException(getExceptionMessage(region, throw new RegionAlreadyInTransitionException("Received:" + currentAction +
encodedName, currentAction)); " for the region:" + region.getRegionNameAsString() +
" ,which we are already trying to " +
(openAction ? OPEN : CLOSE)+ ".");
} }
} }
private String getExceptionMessage(HRegionInfo region, byte[] encodedName,
String receivedAction) {
boolean openAction = this.regionsInTransitionInRS.get(encodedName);
return REGIONSERVER + ":" + this.getServerName() + RECEIVED
+ receivedAction + ALREADY_TRANSITIONING + (openAction ? OPEN : CLOSE)
+ "; " + region.getRegionNameAsString();
}
@Override @Override
@QosPriority(priority=HIGH_QOS) @QosPriority(priority=HIGH_QOS)
public void openRegions(List<HRegionInfo> regions) public void openRegions(List<HRegionInfo> regions)

View File

@ -30,4 +30,5 @@ public class RegionAlreadyInTransitionException extends IOException {
public RegionAlreadyInTransitionException(String s) { public RegionAlreadyInTransitionException(String s) {
super(s); super(s);
} }
} }

View File

@ -78,4 +78,5 @@ public interface RegionServerServices extends OnlineRegions {
* @return map of regions in transition in this RS * @return map of regions in transition in this RS
*/ */
public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS(); public ConcurrentSkipListMap<byte[], Boolean> getRegionsInTransitionInRS();
}
}

View File

@ -50,7 +50,7 @@ import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import static org.junit.Assert.*; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
/** /**

View File

@ -19,9 +19,7 @@ package org.apache.hadoop.hbase.regionserver.handler;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentSkipListMap; import java.util.concurrent.ConcurrentSkipListMap;
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configuration;
@ -135,10 +133,10 @@ class MockRegionServerServices implements RegionServerServices {
public boolean isStopped() { public boolean isStopped() {
return false; return false;
} }
} } @Override
@Override
public boolean isAborted() { public boolean isAborted() {
// TODO Auto-generated method stub // TODO Auto-generated method stub
return false; return false;
} }
} }

View File

@ -132,7 +132,7 @@ public class TestOpenRegionHandler {
@Test @Test
public void testFailedOpenRegion() throws Exception { public void testFailedOpenRegion() throws Exception {
Server server = new MockServer(HTU); Server server = new MockServer(HTU);
RegionServerServices rsServices = new MockRegionServerServices(); RegionServerServices rsServices = Mockito.mock(RegionServerServices.class);
// Create it OFFLINE, which is what it expects // Create it OFFLINE, which is what it expects
ZKAssign.createNodeOffline(server.getZooKeeper(), TEST_HRI, server.getServerName()); ZKAssign.createNodeOffline(server.getZooKeeper(), TEST_HRI, server.getServerName());
@ -157,7 +157,7 @@ public class TestOpenRegionHandler {
@Test @Test
public void testFailedUpdateMeta() throws Exception { public void testFailedUpdateMeta() throws Exception {
Server server = new MockServer(HTU); Server server = new MockServer(HTU);
RegionServerServices rsServices = new MockRegionServerServices(); RegionServerServices rsServices = Mockito.mock(RegionServerServices.class);
// Create it OFFLINE, which is what it expects // Create it OFFLINE, which is what it expects
ZKAssign.createNodeOffline(server.getZooKeeper(), TEST_HRI, server.getServerName()); ZKAssign.createNodeOffline(server.getZooKeeper(), TEST_HRI, server.getServerName());