func newSchedulerState()

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
			},
		},
	)
}