You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ha...@apache.org on 2023/03/22 00:07:38 UTC
[hbase] branch master updated: HBASE-27676 Scan handlers in the RPC executor should match at least one scan queues (#5074)
This is an automated email from the ASF dual-hosted git repository.
haxiaolin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new 7d6a79b768e HBASE-27676 Scan handlers in the RPC executor should match at least one scan queues (#5074)
7d6a79b768e is described below
commit 7d6a79b768e08104c65907a9b5c01411915f56ac
Author: Xiaolin Ha <ha...@apache.org>
AuthorDate: Wed Mar 22 08:07:31 2023 +0800
HBASE-27676 Scan handlers in the RPC executor should match at least one scan queues (#5074)
Signed-off-by: Bryan Beaudreault <bb...@apache.org>
---
.../java/org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java | 8 +++++---
.../hadoop/hbase/regionserver/TestRpcSchedulerFactory.java | 12 ++++++++++++
2 files changed, 17 insertions(+), 3 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 4030304a11e..298a9fc3aeb 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
@@ -79,11 +79,13 @@ public class RWQueueRpcExecutor extends RpcExecutor {
int readQueues = calcNumReaders(this.numCallQueues, callqReadShare);
int readHandlers = Math.max(readQueues, calcNumReaders(handlerCount, callqReadShare));
- int scanQueues = Math.max(0, (int) Math.floor(readQueues * callqScanShare));
int scanHandlers = Math.max(0, (int) Math.floor(readHandlers * callqScanShare));
+ int scanQueues =
+ scanHandlers > 0 ? Math.max(1, (int) Math.floor(readQueues * callqScanShare)) : 0;
- if ((readQueues - scanQueues) > 0) {
- readQueues -= scanQueues;
+ if (scanQueues > 0) {
+ // if scanQueues > 0, the handler count of read should > 0, then we make readQueues >= 1
+ readQueues = Math.max(1, readQueues - scanQueues);
readHandlers -= scanHandlers;
} else {
scanQueues = 0;
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRpcSchedulerFactory.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRpcSchedulerFactory.java
index 91f637aa3de..17f0dc3a783 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRpcSchedulerFactory.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/TestRpcSchedulerFactory.java
@@ -67,6 +67,18 @@ public class TestRpcSchedulerFactory {
assertTrue(rpcScheduler.getClass().equals(SimpleRpcScheduler.class));
}
+ @Test
+ public void testRWQWithoutReadShare() {
+ // Set some configs just to see how it changes the scheduler. Can't assert the settings had
+ // an effect. Just eyeball the log.
+ this.conf.setDouble(RWQueueRpcExecutor.CALL_QUEUE_READ_SHARE_CONF_KEY, 0);
+ this.conf.setDouble(RpcExecutor.CALL_QUEUE_HANDLER_FACTOR_CONF_KEY, 0.5);
+ this.conf.setDouble(RWQueueRpcExecutor.CALL_QUEUE_SCAN_SHARE_CONF_KEY, 0);
+ RpcSchedulerFactory factory = new SimpleRpcSchedulerFactory();
+ RpcScheduler rpcScheduler = factory.create(this.conf, null, null);
+ assertTrue(rpcScheduler.getClass().equals(SimpleRpcScheduler.class));
+ }
+
@Test
public void testFifo() {
RpcSchedulerFactory factory = new FifoRpcSchedulerFactory();