From 585f8fa8a518e30e05047f363b29174de977e48c Mon Sep 17 00:00:00 2001 From: Elliott Clark Date: Tue, 18 Aug 2015 10:52:07 -0700 Subject: [PATCH] HBASE-14239 Fix Branch-1.2 AM can get stuck when meta moves --- .../hadoop/hbase/ipc/RWQueueRpcExecutor.java | 17 ++++++++++++++--- .../hadoop/hbase/master/MasterRpcServices.java | 6 +----- .../hbase/master/TestMasterPriorityRpc.java | 8 ++++---- 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java index 7ba2442f4ad..1be8c650b2c 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java @@ -34,8 +34,7 @@ import org.apache.hadoop.hbase.classification.InterfaceStability; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.Action; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MultiRequest; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.MutateRequest; -import org.apache.hadoop.hbase.protobuf.generated - .RegionServerStatusProtos.ReportRegionStateTransitionRequest; +import org.apache.hadoop.hbase.protobuf.generated.RegionServerStatusProtos; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.RegionAction; import org.apache.hadoop.hbase.protobuf.generated.ClientProtos.ScanRequest; import org.apache.hadoop.hbase.protobuf.generated.RPCProtos.RequestHeader; @@ -189,7 +188,19 @@ public class RWQueueRpcExecutor extends RpcExecutor { if (param instanceof MutateRequest) { return true; } - if (param instanceof ReportRegionStateTransitionRequest) { + // Below here are methods for master. It's a pretty brittle version of this. + // Not sure that master actually needs a read/write queue since 90% of requests to + // master are writing to status or changing the meta table. + // All other read requests are admin generated and can be processed whenever. + // However changing that would require a pretty drastic change and should be done for + // the next major release and not as a fix for HBASE-14239 + if (param instanceof RegionServerStatusProtos.ReportRegionStateTransitionRequest) { + return true; + } + if (param instanceof RegionServerStatusProtos.RegionServerStartupRequest) { + return true; + } + if (param instanceof RegionServerStatusProtos.RegionServerReportRequest) { return true; } return false; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java index 2bb0105df1c..d7bbc9181fc 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterRpcServices.java @@ -278,7 +278,7 @@ public class MasterRpcServices extends RSRpcServices } @Override - @QosPriority(priority=HConstants.ADMIN_QOS) + @QosPriority(priority = HConstants.ADMIN_QOS) public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController controller, GetLastFlushedSequenceIdRequest request) throws ServiceException { try { @@ -292,7 +292,6 @@ public class MasterRpcServices extends RSRpcServices } @Override - @QosPriority(priority=HConstants.ADMIN_QOS) public RegionServerReportResponse regionServerReport( RpcController controller, RegionServerReportRequest request) throws ServiceException { try { @@ -313,7 +312,6 @@ public class MasterRpcServices extends RSRpcServices } @Override - @QosPriority(priority=HConstants.ADMIN_QOS) public RegionServerStartupResponse regionServerStartup( RpcController controller, RegionServerStartupRequest request) throws ServiceException { // Register with server manager @@ -339,7 +337,6 @@ public class MasterRpcServices extends RSRpcServices } @Override - @QosPriority(priority=HConstants.ADMIN_QOS) public ReportRSFatalErrorResponse reportRSFatalError( RpcController controller, ReportRSFatalErrorRequest request) throws ServiceException { String errorText = request.getErrorMessage(); @@ -1319,7 +1316,6 @@ public class MasterRpcServices extends RSRpcServices } @Override - @QosPriority(priority=HConstants.ADMIN_QOS) public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c, ReportRegionStateTransitionRequest req) throws ServiceException { try { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterPriorityRpc.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterPriorityRpc.java index ae55daf22f2..44fa16af187 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterPriorityRpc.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterPriorityRpc.java @@ -45,12 +45,12 @@ public class TestMasterPriorityRpc { private PriorityFunction priority = null; private User user = null; - private final Set ADMIN_METHODS = Sets.newHashSet("GetLastFlushedSequenceId", - "RegionServerReport", "RegionServerStartup", "ReportRSFatalError", - "ReportRegionStateTransition"); + private final Set ADMIN_METHODS = Sets.newHashSet("GetLastFlushedSequenceId"); private final Set NORMAL_METHODS = Sets.newHashSet("CreateTable", "DeleteTable", - "ModifyColumn", "OfflineRegion", "Shutdown"); + "ModifyColumn", "OfflineRegion", "Shutdown", + "RegionServerReport", "RegionServerStartup", "ReportRSFatalError", + "ReportRegionStateTransition"); @Before public void setup() {