[ 
https://issues.apache.org/jira/browse/HBASE-12841?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrew Kyle Purtell resolved HBASE-12841.
-----------------------------------------
    Resolution: Won't Fix

> ClientBackoffPolicies should support immediate rejection of submitted ops
> -------------------------------------------------------------------------
>
>                 Key: HBASE-12841
>                 URL: https://issues.apache.org/jira/browse/HBASE-12841
>             Project: HBase
>          Issue Type: Improvement
>            Reporter: Andrew Kyle Purtell
>            Priority: Major
>
> The ClientBackoffPolicy interface currently has a single method:
> {code}
> public interface ClientBackoffPolicy {
>   public long getBackoffTime(ServerName serverName, byte[] region, 
> ServerStatistics stats);
> }
> {code}
> A backoff policy can only specify the amount of delay to inject before 
> submitting the request(s) to a given server. 
> How that works in the current implementation is we will submit runnables to 
> AsyncProcess that sleep for the specified delay period before proceeding. 
> This consumes task slots that could otherwise be performing useful work. 
> AsyncProcess limits the number of outstanding tasks per region to 
> "hbase.client.max.perregion.tasks" (default 1) and per server 
> "hbase.client.max.perserver.tasks" (default 2). Tasks will be accepted and 
> queued up to "hbase.client.max.total.tasks" (default 100), after which we 
> start globally blocking submissions by waiting on a monitor.
> Sophisticated applications could benefit from an alternate strategy that 
> immediately rejects new work. Rather then returning a backoff interval, the 
> policy could return a value from 0.0 to 1.0, or as percentage from 0 to 100, 
> expressing the likelihood of task rejection. Immediately rejected tasks won't 
> consume task slots nor "stall" by sleeping. Overall the client will be less 
> likely to hit the global limit. Applications using APIs like Table#batch or 
> Table#batchCallback will get control back faster, can determine what 
> operations were failed by pushback, and deal intelligently with request 
> ordering and resubmission/retry concerns. In network queuing this strategy is 
> known as Random Early Drop (or Random Early Detection).



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

Reply via email to