@@ -325,7 +325,7 @@ func (s *Scheduler) getNodesUsage(nodes *[]string, task *corev1.Pod) (*map[strin
325325 failedNodes := make (map [string ]string )
326326 allNodes , err := s .ListNodes ()
327327 if err != nil {
328- return & overallnodeMap , failedNodes , err
328+ return nil , nil , err
329329 }
330330
331331 for _ , node := range allNodes {
@@ -454,6 +454,7 @@ func (s *Scheduler) getPodUsage() (map[string]device.PodUseDeviceStat, error) {
454454}
455455
456456func (s * Scheduler ) Bind (args extenderv1.ExtenderBindingArgs ) (* extenderv1.ExtenderBindingResult , error ) {
457+
457458 klog .InfoS ("Attempting to bind pod to node" , "pod" , args .PodName , "namespace" , args .PodNamespace , "node" , args .Node )
458459 var res * extenderv1.ExtenderBindingResult
459460
@@ -480,37 +481,39 @@ func (s *Scheduler) Bind(args extenderv1.ExtenderBindingArgs) (*extenderv1.Exten
480481 util .BindTimeAnnotations : strconv .FormatInt (time .Now ().Unix (), 10 ),
481482 }
482483
484+ // Function to release node locks in case of binding failure
485+ releaseNodeLocks := func () (* extenderv1.ExtenderBindingResult , error ) {
486+ klog .InfoS ("Release node locks" , "node" , args .Node )
487+ for _ , val := range device .GetDevices () {
488+ val .ReleaseNodeLock (node , current )
489+ }
490+ s .recordScheduleBindingResultEvent (current , EventReasonBindingFailed , []string {}, err )
491+ return & extenderv1.ExtenderBindingResult {Error : err .Error ()}, nil
492+ }
493+
483494 for _ , val := range device .GetDevices () {
484495 err = val .LockNode (node , current )
485496 if err != nil {
486497 klog .ErrorS (err , "Failed to lock node" , "node" , args .Node , "device" , val )
487- goto ReleaseNodeLocks
498+ return releaseNodeLocks ()
488499 }
489500 }
490501
491502 err = util .PatchPodAnnotations (current , tmppatch )
492503 if err != nil {
493504 klog .ErrorS (err , "Failed to patch pod annotations" , "pod" , klog .KObj (current ))
494- goto ReleaseNodeLocks
505+ return releaseNodeLocks ()
495506 }
496507
497508 err = s .kubeClient .CoreV1 ().Pods (args .PodNamespace ).Bind (context .Background (), binding , metav1.CreateOptions {})
498509 if err != nil {
499510 klog .ErrorS (err , "Failed to bind pod" , "pod" , args .PodName , "namespace" , args .PodNamespace , "node" , args .Node )
500- goto ReleaseNodeLocks
511+ return releaseNodeLocks ()
501512 }
502513
503514 s .recordScheduleBindingResultEvent (current , EventReasonBindingSucceed , []string {args .Node }, nil )
504515 klog .InfoS ("Successfully bound pod to node" , "pod" , args .PodName , "namespace" , args .PodNamespace , "node" , args .Node )
505516 return & extenderv1.ExtenderBindingResult {Error : "" }, nil
506-
507- ReleaseNodeLocks:
508- klog .InfoS ("Release node locks" , "node" , args .Node )
509- for _ , val := range device .GetDevices () {
510- val .ReleaseNodeLock (node , current )
511- }
512- s .recordScheduleBindingResultEvent (current , EventReasonBindingFailed , []string {}, err )
513- return & extenderv1.ExtenderBindingResult {Error : err .Error ()}, nil
514517}
515518
516519func (s * Scheduler ) Filter (args extenderv1.ExtenderArgs ) (* extenderv1.ExtenderFilterResult , error ) {
0 commit comments