Change:
errB := errors.New("binder") table := []struct { <del> name             string injectBindError  error sendPod          *v1.Pod algo             core.ScheduleAlgorithm expectErrorPod   *v1.Pod expectForgetPod  *v1.Pod expectAssumedPod *v1.Pod expectError      error expectBind       *v1.Binding eventReason      string </del> <ins> name                string injectBindError     error sendPod             *v1.Pod algo                core.ScheduleAlgorithm registerPluginFuncs []st.RegisterPluginFunc expectErrorPod      *v1.Pod expectForgetPod     *v1.Pod expectAssumedPod    *v1.Pod expectError         error expectBind          *v1.Binding eventReason         string </ins> }{ { <ins> name:    "error reserve pod", sendPod: podWithID("foo", ""), algo:    mockScheduler{core.ScheduleResult{SuggestedHost: testNode.Name, EvaluatedNodes: 1, FeasibleNodes: 1}, nil}, registerPluginFuncs: []st.RegisterPluginFunc{ st.RegisterReservePlugin("FakeReserve", st.NewFakeReservePlugin(framework.NewStatus(framework.Error, "reserve error"))), }, expectErrorPod:   podWithID("foo", testNode.Name), expectForgetPod:  podWithID("foo", testNode.Name), expectAssumedPod: podWithID("foo", testNode.Name), expectError:      errors.New(`error while running Reserve in "FakeReserve" reserve plugin for pod "foo": reserve error`), eventReason:      "FailedScheduling", }, { name:    "error permit pod", sendPod: podWithID("foo", ""), algo:    mockScheduler{core.ScheduleResult{SuggestedHost: testNode.Name, EvaluatedNodes: 1, FeasibleNodes: 1}, nil}, registerPluginFuncs: []st.RegisterPluginFunc{ st.RegisterPermitPlugin("FakePermit", st.NewFakePermitPlugin(framework.NewStatus(framework.Error, "permit error"), time.Minute)), }, expectErrorPod:   podWithID("foo", testNode.Name), expectForgetPod:  podWithID("foo", testNode.Name), expectAssumedPod: podWithID("foo", testNode.Name), expectError:      errors.New(`error while running "FakePermit" permit plugin for pod "foo": permit error`), eventReason:      "FailedScheduling", }, { name:    "error prebind pod", sendPod: podWithID("foo", ""), algo:    mockScheduler{core.ScheduleResult{SuggestedHost: testNode.Name, EvaluatedNodes: 1, FeasibleNodes: 1}, nil}, registerPluginFuncs: []st.RegisterPluginFunc{ st.RegisterPreBindPlugin("FakePreBind", st.NewFakePreBindPlugin(framework.NewStatus(framework.Error, "prebind error"))), }, expectErrorPod:   podWithID("foo", testNode.Name), expectForgetPod:  podWithID("foo", testNode.Name), expectAssumedPod: podWithID("foo", testNode.Name), expectError:      errors.New(`error while running "FakePreBind" prebind plugin for pod "foo": prebind error`), eventReason:      "FailedScheduling", }, { </ins> name:             "bind assumed pod scheduled", sendPod:          podWithID("foo", ""), algo:             mockScheduler{core.ScheduleResult{SuggestedHost: testNode.Name, EvaluatedNodes: 1, FeasibleNodes: 1}, nil},

Discussion:
This is a bug found in The scheduler fails to schedule the pod on the first try due to PV is out of sync. This may happen because the PV/PVC may be modified before the scheduler binder assumes them. However, the scheduler skips the pod update event and never try to scheduler the pod again: This is because when the reserve plugins fails, we didn't try to forget the pod. After the is called, the pod is in the state.
/sig scheduling /sig storage /assign /priority critical-urgent
The label(s) cannot be applied, because the repository doesn't have them <detailsIn response to : /sig scheduling /sig storage /assign /priority critical-urgent Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details