[ 
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.
{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)

Reply via email to