diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java index b02b042766..bd519ad1f9 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java @@ -20,13 +20,6 @@ package org.apache.hadoop.hbase.regionserver; import static org.apache.hadoop.hbase.HConstants.REPLICATION_SCOPE_LOCAL; import static org.apache.hadoop.hbase.util.CollectionUtils.computeIfAbsent; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Optional; -import com.google.common.base.Preconditions; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.io.Closeables; - import java.io.EOFException; import java.io.FileNotFoundException; import java.io.IOException; @@ -191,6 +184,13 @@ import org.apache.hadoop.util.StringUtils; import org.apache.htrace.Trace; import org.apache.htrace.TraceScope; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Optional; +import com.google.common.base.Preconditions; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.io.Closeables; + @SuppressWarnings("deprecation") @InterfaceAudience.Private public class HRegion implements HeapSize, PropagatingConfigurationObserver, Region { @@ -649,8 +649,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi private final NavigableMap replicationScope = new TreeMap<>( Bytes.BYTES_COMPARATOR); - // whether to unassign region if we hit FNFE - private final RegionUnassigner regionUnassigner; + // whether to reassign region if we hit FNFE + private final RegionReassigner regionReassigner; /** * HRegion constructor. This constructor should only be used for testing and * extensions. Instances of HRegion should be instantiated with the @@ -815,9 +815,9 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi boolean unassignForFNFE = conf.getBoolean(HREGION_UNASSIGN_FOR_FNFE, DEFAULT_HREGION_UNASSIGN_FOR_FNFE); if (unassignForFNFE) { - this.regionUnassigner = new RegionUnassigner(rsServices, fs.getRegionInfo()); + this.regionReassigner = new RegionReassigner(rsServices, fs.getRegionInfo()); } else { - this.regionUnassigner = null; + this.regionReassigner = null; } } @@ -5935,8 +5935,8 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi // Try reopening the region since we have lost some storefiles. // See HBASE-17712 for more details. LOG.warn("Store file is lost; close and reopen region", fnfe); - if (regionUnassigner != null) { - regionUnassigner.unassign(); + if (regionReassigner != null) { + regionReassigner.reassign(); } return fnfe; } @@ -7515,7 +7515,7 @@ public class HRegion implements HeapSize, PropagatingConfigurationObserver, Regi long deltaAmount = getLongValue(delta); apply = deltaAmount != 0; newCell = reckonIncrement(delta, deltaAmount, currentValue, columnFamily, now, - (Increment)mutation); + mutation); break; case APPEND: mutationType = MutationType.APPEND; diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 986d6d4863..997cf03c65 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -18,10 +18,6 @@ */ package org.apache.hadoop.hbase.regionserver; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Preconditions; -import com.google.common.collect.Maps; - import java.io.IOException; import java.io.InterruptedIOException; import java.lang.Thread.UncaughtExceptionHandler; @@ -87,6 +83,7 @@ import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.YouAreDeadException; import org.apache.hadoop.hbase.ZNodeClearer; import org.apache.hadoop.hbase.classification.InterfaceAudience; +import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionUtils; @@ -214,6 +211,10 @@ import org.apache.zookeeper.data.Stat; import sun.misc.Signal; import sun.misc.SignalHandler; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Preconditions; +import com.google.common.collect.Maps; + /** * HRegionServer makes a set of HRegions available to clients. It checks in with * the HMaster. There are many HRegionServers in a single HBase deployment. @@ -3744,8 +3745,11 @@ public class HRegionServer extends HasThread implements } @Override - public void unassign(byte[] regionName) throws IOException { - clusterConnection.getAdmin().unassign(regionName, false); + public void reassign(byte[] regionName) throws IOException { + try (final Admin admin = clusterConnection.getAdmin();) { + admin.unassign(regionName, false); + admin.assign(regionName); + } } @Override diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java index 5afa6529ad..5a3fc61a76 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java @@ -34,10 +34,10 @@ import org.apache.hadoop.hbase.classification.InterfaceStability; import org.apache.hadoop.hbase.client.locking.EntityLock; import org.apache.hadoop.hbase.executor.ExecutorService; import org.apache.hadoop.hbase.ipc.RpcServerInterface; -import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.quotas.RegionServerRpcQuotaManager; import org.apache.hadoop.hbase.quotas.RegionServerSpaceQuotaManager; import org.apache.hadoop.hbase.regionserver.throttle.ThroughputController; +import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos.RegionStateTransition.TransitionCode; import org.apache.hadoop.hbase.wal.WAL; import org.apache.zookeeper.KeeperException; @@ -278,5 +278,5 @@ public interface RegionServerServices extends OnlineRegions, FavoredNodesForRegi *

* See HBASE-17712 for more details. */ - void unassign(byte[] regionName) throws IOException; + void reassign(byte[] regionName) throws IOException; } diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionUnassigner.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionUnassigner.java index 8eb78a2716..d7b362cae0 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionUnassigner.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionUnassigner.java @@ -28,37 +28,37 @@ import org.apache.hadoop.hbase.classification.InterfaceAudience; * Used to unssign a region when we hit FNFE. */ @InterfaceAudience.Private -class RegionUnassigner { +class RegionReassigner { - private static final Log LOG = LogFactory.getLog(RegionUnassigner.class); + private static final Log LOG = LogFactory.getLog(RegionReassigner.class); private final RegionServerServices rsServices; private final HRegionInfo regionInfo; - private boolean unassigning = false; + private boolean reassigning = false; - RegionUnassigner(RegionServerServices rsServices, HRegionInfo regionInfo) { + RegionReassigner(RegionServerServices rsServices, HRegionInfo regionInfo) { this.rsServices = rsServices; this.regionInfo = regionInfo; } - synchronized void unassign() { - if (unassigning) { + synchronized void reassign() { + if (reassigning) { return; } - unassigning = true; - new Thread("RegionUnassigner." + regionInfo.getEncodedName()) { + reassigning = true; + new Thread("RegionReassigner." + regionInfo.getEncodedName()) { @Override public void run() { - LOG.info("Unassign " + regionInfo.getRegionNameAsString()); + LOG.info("Reassign " + regionInfo.getRegionNameAsString()); try { - rsServices.unassign(regionInfo.getRegionName()); + rsServices.reassign(regionInfo.getRegionName()); } catch (IOException e) { - LOG.warn("Unassigned " + regionInfo.getRegionNameAsString() + " failed", e); + LOG.warn("Reassigning " + regionInfo.getRegionNameAsString() + " failed", e); } finally { - synchronized (RegionUnassigner.this) { - unassigning = false; + synchronized (RegionReassigner.this) { + reassigning = false; } } } diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java index a99345be75..61da9245d7 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java @@ -349,7 +349,7 @@ public class MockRegionServerServices implements RegionServerServices { } @Override - public void unassign(byte[] regionName) throws IOException { + public void reassign(byte[] regionName) throws IOException { } @Override diff --git hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java index 7ac75712b9..4dab763074 100644 --- hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java +++ hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java @@ -713,7 +713,7 @@ ClientProtos.ClientService.BlockingInterface, RegionServerServices { } @Override - public void unassign(byte[] regionName) throws IOException { + public void reassign(byte[] regionName) throws IOException { } @Override