| BestPossibleStateCalcStage | For partition compute best possible (instance,state) pair based on IdealState,StateModel,LiveInstance |
| BestPossibleStateOutput | |
| ClusterDataCache | Reads the data from the cluster using data accessor. |
| ClusterEvent | |
| CompatibilityCheckStage | controller checks if participant version is compatible |
| CurrentStateComputationStage | For each LiveInstances select currentState and message whose sessionId matches sessionId from LiveInstance Get Partition,State for all the resources computed in previous State [ResourceComputationStage] |
| CurrentStateOutput | |
| ExternalViewComputeStage | |
| HealthDataCache | |
| MessageGenerationStage | Compares the currentState, pendingState with IdealState and generate messages |
| MessageOutput | |
| MessageSelectionStage | |
| MessageSelectionStage.Bounds | |
| MessageThrottleStage | |
| PersistAssignmentStage | Persist the ResourceAssignment of each resource that went through rebalancing |
| PersistContextStage | Persist all dirty contexts set in the controller pipeline |
| ReadClusterDataStage | |
| ReadHealthDataStage | |
| ResourceComputationStage | This stage computes all the resources in a cluster. |
| ResourceCurrentState | |
| StatsAggregationStage | For each LiveInstances select currentState and message whose sessionId matches sessionId from LiveInstance Get Partition,State for all the resources computed in previous State [ResourceComputationStage] |
| TaskAssignmentStage |