You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mb...@apache.org on 2015/03/30 11:51:57 UTC
[03/21] hbase git commit: HBASE-13316 Reduce the downtime on planned
moves of regions
HBASE-13316 Reduce the downtime on planned moves of regions
Summary:
The current behavior of a region move shuts down a region and then starts is up in another regionserver. This causes increased latency and possibly timeouts till the new region's cache is fully warmed up. We can make a region move less disruptive by warming the cache in the destination region server before shutting dow the old region.
See https://issues.apache.org/jira/browse/HBASE-13316
Test Plan:
1. Unit Tests
2. Added test for concurrent moves and warmups
3. Manually tested reads/writes happening with concurrent moves
Subscribers: tedyu
Differential Revision: https://reviews.facebook.net/D35967
Signed-off-by: Elliott Clark <ec...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/ba6345f7
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/ba6345f7
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/ba6345f7
Branch: refs/heads/hbase-12439
Commit: ba6345f7d15d540943825a2b6f2d2c2177ad1c8c
Parents: 5d2c331
Author: Sameet Agarwal <sa...@sameet-mba.dhcp.thefacebook.com>
Authored: Thu Mar 12 10:56:58 2015 -0700
Committer: Elliott Clark <ec...@apache.org>
Committed: Fri Mar 27 11:48:01 2015 -0700
----------------------------------------------------------------------
.../hadoop/hbase/protobuf/ProtobufUtil.java | 22 +
.../hadoop/hbase/protobuf/RequestConverter.java | 11 +
.../hbase/protobuf/generated/AdminProtos.java | 1282 ++++++++++++++++--
hbase-protocol/src/main/protobuf/Admin.proto | 11 +
.../hadoop/hbase/master/AssignmentManager.java | 1 +
.../org/apache/hadoop/hbase/master/HMaster.java | 5 +
.../hadoop/hbase/master/ServerManager.java | 21 +
.../hadoop/hbase/regionserver/HRegion.java | 47 +-
.../hbase/regionserver/RSRpcServices.java | 53 +
.../hadoop/hbase/master/MockRegionServer.java | 8 +
.../hadoop/hbase/master/TestWarmupRegion.java | 164 +++
11 files changed, 1477 insertions(+), 148 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/ba6345f7/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
index 8e027de..8b5b2d7 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/ProtobufUtil.java
@@ -85,6 +85,7 @@ import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.MergeRegionsReques
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.OpenRegionRequest;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.ServerInfo;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.SplitRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;
import org.apache.hadoop.hbase.protobuf.generated.AuthenticationProtos;
import org.apache.hadoop.hbase.protobuf.generated.CellProtos;
import org.apache.hadoop.hbase.protobuf.generated.ClientProtos;
@@ -1728,6 +1729,26 @@ public final class ProtobufUtil {
}
}
+ /**
+ * A helper to warmup a region given a region name
+ * using admin protocol
+ *
+ * @param admin
+ * @param regionInfo
+ *
+ */
+ public static void warmupRegion(final AdminService.BlockingInterface admin,
+ final HRegionInfo regionInfo) throws IOException {
+
+ try {
+ WarmupRegionRequest warmupRegionRequest =
+ RequestConverter.buildWarmupRegionRequest(regionInfo);
+
+ admin.warmupRegion(null, warmupRegionRequest);
+ } catch (ServiceException e) {
+ throw getRemoteException(e);
+ }
+ }
/**
* A helper to open a region using admin protocol.
@@ -1746,6 +1767,7 @@ public final class ProtobufUtil {
}
}
+
/**
* A helper to get the all the online regions on a region
* server using admin protocol.
http://git-wip-us.apache.org/repos/asf/hbase/blob/ba6345f7/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
index 02ad908..f92d901 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/protobuf/RequestConverter.java
@@ -46,6 +46,7 @@ import org.apache.hadoop.hbase.exceptions.DeserializationException;
import org.apache.hadoop.hbase.filter.ByteArrayComparable;
import org.apache.hadoop.hbase.protobuf.generated.AccessControlProtos;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CloseRegionRequest;
+import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.WarmupRegionRequest;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.CompactRegionRequest;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.FlushRegionRequest;
import org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetOnlineRegionRequest;
@@ -849,6 +850,16 @@ public final class RequestConverter {
return builder.build();
}
+ /**
+ * Create a WarmupRegionRequest for a given region name
+ *
+ * @param regionInfo Region we are warming up
+ */
+ public static WarmupRegionRequest buildWarmupRegionRequest(final HRegionInfo regionInfo) {
+ WarmupRegionRequest.Builder builder = WarmupRegionRequest.newBuilder();
+ builder.setRegionInfo(HRegionInfo.convert(regionInfo));
+ return builder.build();
+ }
/**
* Create a CloseRegionRequest for a given encoded region name
*