From 9f9946c3b574e9febe32547cb85df8e0a2e8669d Mon Sep 17 00:00:00 2001 From: Umesh <9414umeshkumar@gmail.com> Date: Mon, 19 May 2025 11:34:59 +0530 Subject: [PATCH 1/2] HBASE-29323 Use Priority Handler for all RegionServerStatus rpc at Master (#6994) Co-authored-by: ukumawat Signed-off-by: Duo Zhang Signed-off-by: Nihal Jain Signed-off-by: Viraj Jasani Reviewed-by: Aman Poonia --- ...sterAnnotationReadingPriorityFunction.java | 4 +-- .../hbase/master/MasterRpcServices.java | 6 ++-- .../hbase/master/TestMasterQosFunction.java | 34 +++++++++++++++++-- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.java index 34ed492d47a3..655a7e078f62 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/master/MasterAnnotationReadingPriorityFunction.java @@ -92,8 +92,8 @@ public int getPriority(RPCProtos.RequestHeader header, Message param, User user) } return HConstants.HIGH_QOS; } - // also use HIGH_QOS for region server report - if (param instanceof RegionServerStatusProtos.RegionServerReportRequest) { + // also use HIGH_QOS for all rest methods in RegionServerStatusProtos + if (RegionServerStatusProtos.class.equals(param.getClass().getEnclosingClass())) { return HConstants.HIGH_QOS; } 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 7b61fcbbc2fe..1020f56a74ac 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 @@ -538,7 +538,8 @@ protected List getServices() { } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) + // priority for all RegionServerStatusProtos rpc's are set HIGH_QOS in + // MasterAnnotationReadingPriorityFunction itself public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController controller, GetLastFlushedSequenceIdRequest request) throws ServiceException { try { @@ -553,7 +554,6 @@ public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController c } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) public RegionServerReportResponse regionServerReport(RpcController controller, RegionServerReportRequest request) throws ServiceException { try { @@ -585,7 +585,6 @@ public RegionServerReportResponse regionServerReport(RpcController controller, } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) public RegionServerStartupResponse regionServerStartup(RpcController controller, RegionServerStartupRequest request) throws ServiceException { // Register with server manager @@ -617,7 +616,6 @@ public RegionServerStartupResponse regionServerStartup(RpcController controller, } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) public ReportRSFatalErrorResponse reportRSFatalError(RpcController controller, ReportRSFatalErrorRequest request) throws ServiceException { String errorText = request.getErrorMessage(); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java index 3ef859bbb085..629bf307446b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java @@ -28,6 +28,7 @@ import org.apache.hadoop.hbase.QosTestHelper; import org.apache.hadoop.hbase.ServerName; import org.apache.hadoop.hbase.TableName; +import org.apache.hadoop.hbase.client.RegionInfoBuilder; import org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction; import org.apache.hadoop.hbase.regionserver.RSRpcServices; import org.apache.hadoop.hbase.testclassification.MasterTests; @@ -39,6 +40,8 @@ import org.junit.experimental.categories.Category; import org.mockito.Mockito; +import org.apache.hbase.thirdparty.com.google.protobuf.ByteString; + import org.apache.hadoop.hbase.shaded.protobuf.ProtobufUtil; import org.apache.hadoop.hbase.shaded.protobuf.generated.HBaseProtos; import org.apache.hadoop.hbase.shaded.protobuf.generated.RegionServerStatusProtos; @@ -97,9 +100,34 @@ public void testRegionInTransition() throws IOException { @Test public void testAnnotations() { - checkMethod(conf, "GetLastFlushedSequenceId", HConstants.ADMIN_QOS, qosFunction); - checkMethod(conf, "CompactRegion", HConstants.ADMIN_QOS, qosFunction); - checkMethod(conf, "GetLastFlushedSequenceId", HConstants.ADMIN_QOS, qosFunction); checkMethod(conf, "GetRegionInfo", HConstants.ADMIN_QOS, qosFunction); } + + @Test + public void testRegionServerStatusProtos() { + RegionServerStatusProtos.RemoteProcedureResult splitWalProcedureResult = + RegionServerStatusProtos.RemoteProcedureResult.newBuilder() + .setStatus(RegionServerStatusProtos.RemoteProcedureResult.Status.SUCCESS).setProcId(100) + .build(); + + RegionServerStatusProtos.ReportProcedureDoneRequest splitWalProcedureDoneReport = + RegionServerStatusProtos.ReportProcedureDoneRequest.newBuilder() + .addResult(splitWalProcedureResult).build(); + + RegionServerStatusProtos.GetLastFlushedSequenceIdRequest lastFlushedSequenceIdRequest = + RegionServerStatusProtos.GetLastFlushedSequenceIdRequest.newBuilder() + .setRegionName(ByteString.copyFrom(RegionInfoBuilder.FIRST_META_REGIONINFO.getRegionName())) + .build(); + + RegionServerStatusProtos.RegionServerReportRequest regionServerReportRequest = + RegionServerStatusProtos.RegionServerReportRequest.newBuilder() + .setServer(ProtobufUtil.toServerName(ServerName.valueOf("locahost:60020", 100))).build(); + + checkMethod(conf, "ReportProcedureDone", HConstants.HIGH_QOS, qosFunction, + splitWalProcedureDoneReport); + checkMethod(conf, "GetLastFlushedSequenceId", HConstants.HIGH_QOS, qosFunction, + lastFlushedSequenceIdRequest); + checkMethod(conf, "RegionServerReport", HConstants.HIGH_QOS, qosFunction, + regionServerReportRequest); + } } From 0d4934d702197ee9937e1c2e757f848932892e35 Mon Sep 17 00:00:00 2001 From: ukumawat Date: Tue, 20 May 2025 16:14:50 +0530 Subject: [PATCH 2/2] HBASE-29323 added test for CompactRegion as well --- .../org/apache/hadoop/hbase/master/TestMasterQosFunction.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java index 629bf307446b..18ad3a47953b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/TestMasterQosFunction.java @@ -129,5 +129,6 @@ public void testRegionServerStatusProtos() { lastFlushedSequenceIdRequest); checkMethod(conf, "RegionServerReport", HConstants.HIGH_QOS, qosFunction, regionServerReportRequest); + checkMethod(conf, "CompactRegion", HConstants.ADMIN_QOS, qosFunction); } }