From 65975f680471b686bca2180c13dcca82b40ec5f2 Mon Sep 17 00:00:00 2001 From: ukumawat Date: Fri, 16 May 2025 18:03:41 +0530 Subject: [PATCH 1/6] HBASE-29323 use ADMIN_QOS priority for reportProcedureDone and reportRegionStateTransition --- .../java/org/apache/hadoop/hbase/master/MasterRpcServices.java | 2 ++ 1 file changed, 2 insertions(+) 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 faedc6dd628f..bde1953547fd 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 @@ -1851,6 +1851,7 @@ public UnassignRegionResponse unassignRegion(RpcController controller, UnassignR } @Override + @QosPriority(priority = HConstants.ADMIN_QOS) public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c, ReportRegionStateTransitionRequest req) throws ServiceException { try { @@ -2558,6 +2559,7 @@ public ClearDeadServersResponse clearDeadServers(RpcController controller, } @Override + @QosPriority(priority = HConstants.ADMIN_QOS) public ReportProcedureDoneResponse reportProcedureDone(RpcController controller, ReportProcedureDoneRequest request) throws ServiceException { // Check Masters is up and ready for duty before progressing. Remote side will keep trying. From bbf9f24536de0ebacd495c8fc1526b73a0387de0 Mon Sep 17 00:00:00 2001 From: ukumawat Date: Fri, 16 May 2025 23:20:36 +0530 Subject: [PATCH 2/6] HBASE-29323 use HIGH_QOS priority for reportProcedureDone --- .../java/org/apache/hadoop/hbase/master/MasterRpcServices.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) 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 bde1953547fd..c1aab4a01ba4 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 @@ -1851,7 +1851,6 @@ public UnassignRegionResponse unassignRegion(RpcController controller, UnassignR } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) public ReportRegionStateTransitionResponse reportRegionStateTransition(RpcController c, ReportRegionStateTransitionRequest req) throws ServiceException { try { @@ -2559,7 +2558,7 @@ public ClearDeadServersResponse clearDeadServers(RpcController controller, } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) + @QosPriority(priority = HConstants.HIGH_QOS) public ReportProcedureDoneResponse reportProcedureDone(RpcController controller, ReportProcedureDoneRequest request) throws ServiceException { // Check Masters is up and ready for duty before progressing. Remote side will keep trying. From 0e7404e43f1ce4ee974dcb01deca014a72639b5c Mon Sep 17 00:00:00 2001 From: ukumawat Date: Sat, 17 May 2025 17:20:03 +0530 Subject: [PATCH 3/6] HBASE-29323 use HIGH_QOS priority for all param class defined in RegionServerReportRequest --- .../hbase/master/MasterAnnotationReadingPriorityFunction.java | 2 +- .../java/org/apache/hadoop/hbase/master/MasterRpcServices.java | 1 - 2 files changed, 1 insertion(+), 2 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 70ed148ef4e2..f49a6cc419fa 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 @@ -93,7 +93,7 @@ protected int getBasePriority(RequestHeader header, Message param) { return HConstants.HIGH_QOS; } // also use HIGH_QOS for region server report - if (param instanceof RegionServerStatusProtos.RegionServerReportRequest) { + if (param.getClass().getEnclosingClass().equals(RegionServerStatusProtos.class)) { return HConstants.HIGH_QOS; } // Trust the client-set priorities if set 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 c1aab4a01ba4..faedc6dd628f 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 @@ -2558,7 +2558,6 @@ public ClearDeadServersResponse clearDeadServers(RpcController controller, } @Override - @QosPriority(priority = HConstants.HIGH_QOS) public ReportProcedureDoneResponse reportProcedureDone(RpcController controller, ReportProcedureDoneRequest request) throws ServiceException { // Check Masters is up and ready for duty before progressing. Remote side will keep trying. From c1a25068c5e60febb2cc7b67b8befdd4f68509d0 Mon Sep 17 00:00:00 2001 From: ukumawat Date: Sat, 17 May 2025 18:12:44 +0530 Subject: [PATCH 4/6] HBASE-29323 added JUnits and comment change --- ...sterAnnotationReadingPriorityFunction.java | 2 +- .../hbase/master/MasterRpcServices.java | 6 ++-- .../hbase/master/TestMasterQosFunction.java | 30 +++++++++++++++++++ 3 files changed, 33 insertions(+), 5 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 f49a6cc419fa..3e77db784a5f 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,7 +92,7 @@ protected int getBasePriority(RequestHeader header, Message param) { } return HConstants.HIGH_QOS; } - // also use HIGH_QOS for region server report + // also use HIGH_QOS for all rest methods in RegionServerStatusProtos if (param.getClass().getEnclosingClass().equals(RegionServerStatusProtos.class)) { 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 faedc6dd628f..e3b30bc733a8 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 @@ -608,7 +608,8 @@ void stop() { } @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 { @@ -623,7 +624,6 @@ public GetLastFlushedSequenceIdResponse getLastFlushedSequenceId(RpcController c } @Override - @QosPriority(priority = HConstants.ADMIN_QOS) public RegionServerReportResponse regionServerReport(RpcController controller, RegionServerReportRequest request) throws ServiceException { try { @@ -659,7 +659,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 @@ -691,7 +690,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 6259c256d151..729a9045e51d 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 @@ -37,6 +37,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; @@ -98,4 +100,32 @@ public void testRegionInTransition() throws IOException { public void testAnnotations() { checkMethod(conf, "GetLastFlushedSequenceId", 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 a8c338b55014044f62d124252c34c1c7ecea427a Mon Sep 17 00:00:00 2001 From: ukumawat Date: Sat, 17 May 2025 22:55:43 +0530 Subject: [PATCH 5/6] HBASE-29323 Handling NPE if no enclosing class present --- .../hbase/master/MasterAnnotationReadingPriorityFunction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3e77db784a5f..464dfaca7035 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 @@ -93,7 +93,7 @@ protected int getBasePriority(RequestHeader header, Message param) { return HConstants.HIGH_QOS; } // also use HIGH_QOS for all rest methods in RegionServerStatusProtos - if (param.getClass().getEnclosingClass().equals(RegionServerStatusProtos.class)) { + if (RegionServerStatusProtos.class.equals(param.getClass().getEnclosingClass())) { return HConstants.HIGH_QOS; } // Trust the client-set priorities if set From e48dc4ab9b9bff3236ba25c858266dd9281cce97 Mon Sep 17 00:00:00 2001 From: ukumawat Date: Sat, 17 May 2025 23:07:52 +0530 Subject: [PATCH 6/6] HBASE-29323 resolve test failure for TestMasterQosFunction.testAnnotations --- .../org/apache/hadoop/hbase/master/TestMasterQosFunction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 729a9045e51d..79fa8e713652 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 @@ -98,7 +98,7 @@ public void testRegionInTransition() throws IOException { @Test public void testAnnotations() { - checkMethod(conf, "GetLastFlushedSequenceId", HConstants.ADMIN_QOS, qosFunction); + checkMethod(conf, "GetRegionInfo", HConstants.ADMIN_QOS, qosFunction); } @Test