stack created HBASE-9673:
----------------------------

             Summary: Request priority revamp
                 Key: HBASE-9673
                 URL: https://issues.apache.org/jira/browse/HBASE-9673
             Project: HBase
          Issue Type: Brainstorming
            Reporter: stack


Currently in the server we have three (four?) queues ranging from Normal (0) to 
High priority (100) with Replication priority falling between the two.

Priority is determined by introspecting the incoming invocation to pull out 
which region is targeted by the query and/or to read a 'priority' annotation 
that is on the invocation's method -- e.g. closeRegion/openRegion have 
@QosPriority(priority=HConstants.HIGH_QOS)  These annotations are awkwardly on 
the java implementation, not on the protobuf Service.

The current means of introspection determining priority running the silly guava 
function is costly done on each call.  The annotations being on the java 
implementation rather than on the pb Service or in the pbs themselves requires 
somersaults extracting priority. If they were on the latter, then they would be 
more readily available down in rpc where invocation/scheduling is done.

There is no way currently for a mapreduce task to tell hbase it is a low 
priority query nor for a webservice coming in the door to say I need a bit of 
info now -- and I don't care who you push aside.

A suggestion of [~eclark]'s is that we just have the client set the priority.  
This has much merit.  We could keep it down low just do what the server 
currently does -- the introspection, annotations -- on client side and have it 
then set the priority into the request header where it will be readily 
available on the server when it is trying to figure what to do w/ the incoming 
call (high, low, or in-between).

We could even expose this in our API.

Above is about revamp of how the server figures the static priority of a call 
(HBASE-9612 actually adds priority to the RpcController and into the 
RequestHeader).  Server could just respect the client priority for now.

Later we'd want the server to adjust priorities based off what it thought of 
the user -- trusted or an alien -- as well as factor in its current load.  An 
overloaded server might reject low priority calls (Had a good chat on QoS w/ 
[~toffer] about QoS at the corner of Van Ness and Market last night).

Later calls might come w/ an advertised SLA.  The server might reject calls it 
thought it could not service in time rather than take on more load (based off 
history of similarly sized queries, etc.).



--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to