Code change:
if nodeConditionsChanged(newNode, oldNode) { events = append(events, queue.NodeConditionChange) } <ins> if nodeAnnotationsChanged(newNode, oldNode) { events = append(events, queue.NodeAnnotationChange) } </ins> return events } func nodeAllocatableChanged(newNode *v1.Node, oldNode *v1.Node) bool { <del> return !reflect.DeepEqual(oldNode.Status.Allocatable, newNode.Status.Allocatable) </del> <ins> return !equality.Semantic.DeepEqual(oldNode.Status.Allocatable, newNode.Status.Allocatable) </ins> } func nodeLabelsChanged(newNode *v1.Node, oldNode *v1.Node) bool { <del> return !reflect.DeepEqual(oldNode.GetLabels(), newNode.GetLabels()) </del> <ins> return !equality.Semantic.DeepEqual(oldNode.GetLabels(), newNode.GetLabels()) </ins> } func nodeTaintsChanged(newNode *v1.Node, oldNode *v1.Node) bool { <del> return !reflect.DeepEqual(newNode.Spec.Taints, oldNode.Spec.Taints) </del> <ins> return !equality.Semantic.DeepEqual(newNode.Spec.Taints, oldNode.Spec.Taints) </ins> } func nodeConditionsChanged(newNode *v1.Node, oldNode *v1.Node) bool {

Related discussion:
text: Due to limited character space, I've stored additional information in annotations on nodes. My custom scheduling plugins read these annotations to schedule Pods. However, when a Pod fails to be scheduled on a node, I want it to be removed from the Unschedulable queue. This can be achieved by modifying the annotations of the node, allowing the Pod to be rescheduled. Unfortunately, the eventHandler of the scheduler only supports five types of node events, and it does not include the nodeAnnotationsChanged event. Consequently, I am currently unable to trigger rescheduling by changing the annotations of nodes. /sig scheduling Unschedulable pods will be rescheduled after annotations of nodes changed. None No response <details</details<details</details<details</details<details</details<details</details<details</details
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions 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
/cc
/assign
It's more like a new feature, not bug because it doesn't lead to any bad behavior on the upstream. /remove-kind bug /kind feature
My concern is node annotation is arbitrary, change a node annotation doesn't imply a pod is schedulable. But for other events, like node labels, node taints, they're the constraints we consider in scheduling. They're different, I'm afraid this will lead to invalid scheduling attempts. Who is responsible for change the annotations in you scenario?
This enhancement has no impact on the in-tree plugins / upstream scheduler, right? Only (custom) plugins, that want to reschedule Pods via the node annotation change, will register event to EventsToRegister.
I have a controller capable of modifying node annotations to indicate node's current availability. And my custom plugins need to be aware of these changes.
I guess we can still be impacted when scheduling pod failed because of no fit node rather than failed by the plugin.