Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
None
-
Reviewed
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.
Attachments
Attachments
Issue Links
- breaks
-
HADOOP-13189 FairCallQueue makes callQueue larger than the configured capacity.
- Closed
- depends upon
-
HADOOP-10279 Create multiplexer, a requirement for the fair queue
- Closed
-
HADOOP-10281 Create a scheduler, which assigns schedulables a priority level
- Closed
- relates to
-
HADOOP-16097 Provide proper documentation for FairCallQueue
- Resolved