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

Chris Li updated HADOOP-10282:
------------------------------

    Description: 
The FairCallQueue ensures quality of service by altering the order of RPC calls 
internally. 

It consists of three parts:
1. a Scheduler (`HistoryRpcScheduler` is provided) which provides a priority 
number from 0 to N (0 being highest priority)
2. a Multi-level queue (residing in `FairCallQueue`) which provides a way to 
keep calls in priority order internally
3. a Multiplexer (`WeightedRoundRobinMultiplexer` is provided) which provides 
logic to control which queue to take from

Currently the Mux and Scheduler are not pluggable, but they probably should be 
(up for discussion).

This is how it is used:

// Production
1. Call is created and given to the CallQueueManager
2. CallQueueManager requests a `put(T call)` into the `FairCallQueue` which 
implements `BlockingQueue`
3. `FairCallQueue` asks its scheduler for a scheduling decision, which is an 
integer e.g. 12
4. `FairCallQueue` inserts Call into the 12th queue: `queues.get(12).put(call)`

// Consumption
1. CallQueueManager requests `take()` or `poll()` on FairCallQueue
2. `FairCallQueue` asks its multiplexer for which queue to draw from, which 
will also be an integer e.g. 2
3. `FairCallQueue` draws from this queue if it has an available call (or tries 
other queues if it is empty)

Additional information is available in the linked JIRAs regarding the Scheduler 
and Multiplexer's roles.

> Create a FairCallQueue: a multi-level call queue which schedules incoming 
> calls and multiplexes outgoing calls
> --------------------------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-10282
>                 URL: https://issues.apache.org/jira/browse/HADOOP-10282
>             Project: Hadoop Common
>          Issue Type: Sub-task
>            Reporter: Chris Li
>         Attachments: HADOOP-10282.patch
>
>
> The FairCallQueue ensures quality of service by altering the order of RPC 
> calls internally. 
> It consists of three parts:
> 1. a Scheduler (`HistoryRpcScheduler` is provided) which provides a priority 
> number from 0 to N (0 being highest priority)
> 2. a Multi-level queue (residing in `FairCallQueue`) which provides a way to 
> keep calls in priority order internally
> 3. a Multiplexer (`WeightedRoundRobinMultiplexer` is provided) which provides 
> logic to control which queue to take from
> Currently the Mux and Scheduler are not pluggable, but they probably should 
> be (up for discussion).
> This is how it is used:
> // Production
> 1. Call is created and given to the CallQueueManager
> 2. CallQueueManager requests a `put(T call)` into the `FairCallQueue` which 
> implements `BlockingQueue`
> 3. `FairCallQueue` asks its scheduler for a scheduling decision, which is an 
> integer e.g. 12
> 4. `FairCallQueue` inserts Call into the 12th queue: 
> `queues.get(12).put(call)`
> // Consumption
> 1. CallQueueManager requests `take()` or `poll()` on FairCallQueue
> 2. `FairCallQueue` asks its multiplexer for which queue to draw from, which 
> will also be an integer e.g. 2
> 3. `FairCallQueue` draws from this queue if it has an available call (or 
> tries other queues if it is empty)
> Additional information is available in the linked JIRAs regarding the 
> Scheduler and Multiplexer's roles.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to