HBASE-27676 Scan handlers in the RPC executor should match at least one scan queues (#5074)

Signed-off-by: Bryan Beaudreault <bbeaudreault@apache.org>
This commit is contained in:
Xiaolin Ha 2023-03-22 08:07:31 +08:00 committed by GitHub
parent e6af6e0be9
commit 7d6a79b768
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 3 deletions

View File

@ -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;

View File

@ -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();