[
https://issues.apache.org/jira/browse/HBASE-27676?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Xiaolin Ha updated HBASE-27676:
-------------------------------
Description:
This issue is try to avoid NO scan queues for some scan handlers.
For example, if we set hbase.regionserver.handler.count=150,
hbase.ipc.server.callqueue.scan.ratio=0.1,
hbase.ipc.server.callqueue.read.ratio=0.5,
hbase.ipc.server.callqueue.handler.factor=0.1, then there will be
150*0.5{_}*{_}0.1=7 scan handlers, but there are 150*0.1{_}*{_}0.5*0.1=0 scan
RPC queues.
When there are no scan rpc queues, all the scan and get requests will be
dispatched to the read rpc queues, while we we thought they had been dealt with
separately, since the scan handler count is not 0. When there are not enough
handlers for large scan requests under this circumstance, the small get
requests will be blocked in the rpc queues.
We can see from the codes,
{code:java}
int scanQueues = Math.max(0, (int) Math.floor(readQueues * callqScanShare));
int scanHandlers = Math.max(0, (int) Math.floor(readHandlers * callqScanShare));
if ((readQueues - scanQueues) > 0) {
readQueues -= scanQueues;
readHandlers -= scanHandlers;
} else {
scanQueues = 0;
scanHandlers = 0;
} {code}
when readQueues * callqScanShare < 1 but readHandlers * callqScanShare > 1,
there will be some iddle scan handlers with NO scan queues.
was:
This issue is try to avoid NO scan queues for some scan handlers.
For example, if we set hbase.regionserver.handler.count=150,
hbase.ipc.server.callqueue.scan.ratio=0.1,
hbase.ipc.server.callqueue.read.ratio=0.5,
hbase.ipc.server.callqueue.handler.factor=0.1, then there will be
150{_}0.5{_}0.1=7 scan handlers, but there are 150{_}0.1{_}0.5*0.1=0 scan RPC
queues.
When there are no scan rpc queues, all the scan and get requests will be
dispatched to the read rpc queues, while we we thought they had been dealt with
separately, since the scan handler count is not 0. When there are not enough
handlers for large scan requests under this circumstance, the small get
requests will be blocked in the rpc queues.
We can see from the codes,
{code:java}
int scanQueues = Math.max(0, (int) Math.floor(readQueues * callqScanShare));
int scanHandlers = Math.max(0, (int) Math.floor(readHandlers * callqScanShare));
if ((readQueues - scanQueues) > 0) {
readQueues -= scanQueues;
readHandlers -= scanHandlers;
} else {
scanQueues = 0;
scanHandlers = 0;
} {code}
when readQueues * callqScanShare < 1 but readHandlers * callqScanShare > 1,
there will be some iddle scan handlers with NO scan queues.
> Scan handlers in the RPC executor should match at least one scan queues
> -----------------------------------------------------------------------
>
> Key: HBASE-27676
> URL: https://issues.apache.org/jira/browse/HBASE-27676
> Project: HBase
> Issue Type: Improvement
> Affects Versions: 2.5.3
> Reporter: Xiaolin Ha
> Assignee: Xiaolin Ha
> Priority: Major
>
> This issue is try to avoid NO scan queues for some scan handlers.
> For example, if we set hbase.regionserver.handler.count=150,
> hbase.ipc.server.callqueue.scan.ratio=0.1,
> hbase.ipc.server.callqueue.read.ratio=0.5,
> hbase.ipc.server.callqueue.handler.factor=0.1, then there will be
> 150*0.5{_}*{_}0.1=7 scan handlers, but there are 150*0.1{_}*{_}0.5*0.1=0 scan
> RPC queues.
> When there are no scan rpc queues, all the scan and get requests will be
> dispatched to the read rpc queues, while we we thought they had been dealt
> with separately, since the scan handler count is not 0. When there are not
> enough handlers for large scan requests under this circumstance, the small
> get requests will be blocked in the rpc queues.
> We can see from the codes,
> {code:java}
> int scanQueues = Math.max(0, (int) Math.floor(readQueues * callqScanShare));
> int scanHandlers = Math.max(0, (int) Math.floor(readHandlers *
> callqScanShare));
> if ((readQueues - scanQueues) > 0) {
> readQueues -= scanQueues;
> readHandlers -= scanHandlers;
> } else {
> scanQueues = 0;
> scanHandlers = 0;
> } {code}
> when readQueues * callqScanShare < 1 but readHandlers * callqScanShare > 1,
> there will be some iddle scan handlers with NO scan queues.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)