in pkg/shim/scheduler_state.go [115:183]
func newSchedulerState() *fsm.FSM {
states := SchedulerStates()
return fsm.NewFSM(
states.New, fsm.Events{
{
Name: RegisterScheduler.String(),
Src: []string{states.New},
Dst: states.Registering,
},
{
Name: RegisterSchedulerSucceed.String(),
Src: []string{states.Registering},
Dst: states.Registered,
},
{
Name: RegisterSchedulerFailed.String(),
Src: []string{states.Registering},
Dst: states.Stopped,
},
{
Name: RecoverScheduler.String(),
Src: []string{states.Registered},
Dst: states.Recovering,
},
{
Name: RecoverSchedulerSucceed.String(),
Src: []string{states.Recovering},
Dst: states.Running,
},
{
Name: RecoverSchedulerFailed.String(),
Src: []string{states.Recovering},
Dst: states.Stopped,
},
},
fsm.Callbacks{
events.EnterState: func(_ context.Context, event *fsm.Event) {
log.Log(log.ShimFSM).Debug("scheduler shim state transition",
zap.String("source", event.Src),
zap.String("destination", event.Dst),
zap.String("event", event.Event))
},
states.Registered: func(_ context.Context, event *fsm.Event) {
scheduler := event.Args[0].(*KubernetesShim) //nolint:errcheck
scheduler.triggerSchedulerStateRecovery() // if reaches registered, trigger recovering
},
states.Recovering: func(_ context.Context, event *fsm.Event) {
scheduler := event.Args[0].(*KubernetesShim) //nolint:errcheck
scheduler.recoverSchedulerState() // do recovering
},
states.Running: func(_ context.Context, event *fsm.Event) {
scheduler := event.Args[0].(*KubernetesShim) //nolint:errcheck
scheduler.doScheduling() // do scheduling
},
RegisterScheduler.String(): func(_ context.Context, event *fsm.Event) {
scheduler := event.Args[0].(*KubernetesShim) //nolint:errcheck
scheduler.register() // trigger registration
},
RegisterSchedulerFailed.String(): func(_ context.Context, event *fsm.Event) {
scheduler := event.Args[0].(*KubernetesShim) //nolint:errcheck
scheduler.handleSchedulerFailure() // registration failed, stop the scheduler
},
RecoverSchedulerFailed.String(): func(_ context.Context, event *fsm.Event) {
scheduler := event.Args[0].(*KubernetesShim) //nolint:errcheck
scheduler.handleSchedulerFailure() // recovery failed
},
},
)
}