Change:
"k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" <del> fakecache "k8s.io/kubernetes/pkg/scheduler/internal/cache/fake" </del> "k8s.io/kubernetes/pkg/scheduler/internal/queue" ) <del> func TestSkipPodUpdate(t *testing.T) { for _, test := range []struct { pod              *v1.Pod isAssumedPodFunc func(*v1.Pod) bool getPodFunc       func(*v1.Pod) *v1.Pod expected         bool name             string }{ { name: "Non-assumed pod", pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "pod-0", }, }, isAssumedPodFunc: func(*v1.Pod) bool { return false }, getPodFunc: func(*v1.Pod) *v1.Pod { return &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "pod-0", }, } }, expected: false, }, { name: "with changes on ResourceVersion, Spec.NodeName and/or Annotations", pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:            "pod-0", Annotations:     map[string]string{"a": "b"}, ResourceVersion: "0", }, Spec: v1.PodSpec{ NodeName: "node-0", }, }, isAssumedPodFunc: func(*v1.Pod) bool { return true }, getPodFunc: func(*v1.Pod) *v1.Pod { return &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:            "pod-0", Annotations:     map[string]string{"c": "d"}, ResourceVersion: "1", }, Spec: v1.PodSpec{ NodeName: "node-1", }, } }, expected: true, }, { name: "with ServerSideApply changes on Annotations", pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:            "pod-0", Annotations:     map[string]string{"a": "b"}, ResourceVersion: "0", ManagedFields: []metav1.ManagedFieldsEntry{ { Manager:    "some-actor", Operation:  metav1.ManagedFieldsOperationApply, APIVersion: "v1", FieldsType: "FieldsV1", FieldsV1: &metav1.FieldsV1{ Raw: []byte(` "f:metadata": { "f:annotations": { "f:a: {} } } `), }, }, }, }, Spec: v1.PodSpec{ NodeName: "node-0", }, }, isAssumedPodFunc: func(*v1.Pod) bool { return true }, getPodFunc: func(*v1.Pod) *v1.Pod { return &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:            "pod-0", Annotations:     map[string]string{"a": "c", "d": "e"}, ResourceVersion: "1", ManagedFields: []metav1.ManagedFieldsEntry{ { Manager:    "some-actor", Operation:  metav1.ManagedFieldsOperationApply, APIVersion: "v1", FieldsType: "FieldsV1", FieldsV1: &metav1.FieldsV1{ Raw: []byte(` "f:metadata": { "f:annotations": { "f:a: {} "f:d: {} } } `), }, }, { Manager:    "some-actor", Operation:  metav1.ManagedFieldsOperationApply, APIVersion: "v1", FieldsType: "FieldsV1", FieldsV1: &metav1.FieldsV1{ Raw: []byte(` "f:metadata": { "f:annotations": { "f:a: {} } } `), }, }, }, }, Spec: v1.PodSpec{ NodeName: "node-1", }, } }, expected: true, }, { name: "with changes on Labels", pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:   "pod-0", Labels: map[string]string{"a": "b"}, }, }, isAssumedPodFunc: func(*v1.Pod) bool { return true }, getPodFunc: func(*v1.Pod) *v1.Pod { return &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:   "pod-0", Labels: map[string]string{"c": "d"}, }, } }, expected: false, }, { name: "with changes on Finalizers", pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:       "pod-0", Finalizers: []string{"a", "b"}, }, }, isAssumedPodFunc: func(*v1.Pod) bool { return true }, getPodFunc: func(*v1.Pod) *v1.Pod { return &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name:       "pod-0", Finalizers: []string{"c", "d"}, }, } }, expected: true, }, { name: "with changes on Conditions", pod: &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "pod-0", }, Status: v1.PodStatus{ Conditions: []v1.PodCondition{ {Type: "foo"}, }, }, }, isAssumedPodFunc: func(*v1.Pod) bool { return true }, getPodFunc: func(*v1.Pod) *v1.Pod { return &v1.Pod{ ObjectMeta: metav1.ObjectMeta{ Name: "pod-0", }, } }, expected: true, }, } { t.Run(test.name, func(t *testing.T) { c := &Scheduler{ SchedulerCache: &fakecache.Cache{ IsAssumedPodFunc: test.isAssumedPodFunc, GetPodFunc:       test.getPodFunc, }, } got := c.skipPodUpdate(test.pod) if got != test.expected { t.Errorf("skipPodUpdate() = %t, expected = %t", got, test.expected) } }) } } </del> func TestNodeAllocatableChanged(t *testing.T) { newQuantity := func(value int64) resource.Quantity { return *resource.NewQuantity(value, resource.BinarySI)

Discussion:
Currently the scheduler may add an assumed pod back to the queue if the update didn't include specific fields (see ). There doesn't seem to be a reason why we can't simply ignore all updates of assumed pods. Assumed pods are waiting to be bound, if binding succeeded then the pod is scheduled. If binding fails, the pod's latest version will be put back into the unschedulable queue anyways. Performance: we save on unnecessary scheduling attempts. This is a followup on the discussion we had in /sig scheduling /triage accepted /help
This request has been marked as needing help from a contributor. Please ensure the request meets the requirements listed . If this request no longer meets these requirements, the label can be removed by commenting with the command. <detailsIn response to : #### What would you like to be : /triage accepted /help 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
What we basically need to do is: 1) remove function 2) in the places where we call , we should simply call
/assign