# Scheduling: `Checker` and `Scheduler`

| Name                                               | Observation                                   | Objective                                                |
| :------------------------------------------------- | :-------------------------------------------- | :------------------------------------------------------- |
| **`{Replica,Label}Checker`** and **`RuleChecker`** | `Region peer` count and location              | `Region peer` state matches configuration                |
|                                                    | `Region leader` location                      | Fix broken replica in time                               |
|                                                    | `Store` state (`Down/Offline`)                | Transfer `region` from store in order to get it offline  |
| **`MergeChecker`**                                 | `Region` size / keys                          | Merge empty regions or regions with very little data     |
|                                                    | `Region startKey`, `endKey` (`KeyType`)       |                                                          |
|                                                    | `Region` split time                           |                                                          |
| **`BalanceRegionScheduler`**                       | `Region peer` distribution                    | Data at different stores is roughly equal                |
|                                                    | Total `region` `size/count` of `store`        | Each store has enough free space                         |
|                                                    | Disk space usage and availability             |                                                          |
| **`BalanceLeaderScheduler`**                       | `Region leader` distribution                  | Equal number of leaders per store                        |
|                                                    | Total `leader` `count/size` of `store`        |                                                          |
| **`HotScheduler`**                                 | `Store` load                                  | Load of different stores is roughtly equal               |
|                                                    | Read/Write traffic, `QPS` of `store`          | No single store bottleneck                               |
|                                                    | Read/Write traffic, `QPS` of `region`         |                                                          |
| **`EvictLeaderScheduler`**                         | `Leader` count of specified `store`           | Store has no region leader                               |
| **`ScatterRangeScheduler`**                        | `Region peer` distribution of given key range | Regions within the range are dispersed across all stores |

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

