diff --git a/go.sum b/go.sum index 0941fde50..0f712aa54 100644 --- a/go.sum +++ b/go.sum @@ -12,8 +12,6 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/ccoveille/go-safecast v1.8.0 h1:vx5q4QzC8MJuESZLOKZXp+63gPCt4qsaeVOFMTFlDCk= -github.com/ccoveille/go-safecast v1.8.0/go.mod h1:QqwNjxQ7DAqY0C721OIO9InMk9zCwcsO7tnRuHytad8= github.com/ccoveille/go-safecast v1.8.2 h1:+d+s5UGQiCVJX9oYc8XvYcB2zCMBlax6lIP7YdxXLHA= github.com/ccoveille/go-safecast v1.8.2/go.mod h1:M0Ubpl11x63fE7iOfk5MtngQFXsntcRzOoSsFDqQYDY= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 76c00aaac..8b3a6626c 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -325,7 +325,7 @@ func (s *Scheduler) getNodesUsage(nodes *[]string, task *corev1.Pod) (*map[strin failedNodes := make(map[string]string) allNodes, err := s.ListNodes() if err != nil { - return &overallnodeMap, failedNodes, err + return nil, nil, err } for _, node := range allNodes { @@ -480,37 +480,41 @@ func (s *Scheduler) Bind(args extenderv1.ExtenderBindingArgs) (*extenderv1.Exten util.BindTimeAnnotations: strconv.FormatInt(time.Now().Unix(), 10), } + // Function to release node locks in case of binding failure + releaseNodeLocks := func() (*extenderv1.ExtenderBindingResult, error) { + klog.InfoS("Release node locks", "node", args.Node) + for _, val := range device.GetDevices() { + if releaseErr := val.ReleaseNodeLock(node, current); releaseErr != nil { + klog.ErrorS(releaseErr, "Failed to release node lock", "node", args.Node, "device", val) + } + } + s.recordScheduleBindingResultEvent(current, EventReasonBindingFailed, []string{}, err) + return &extenderv1.ExtenderBindingResult{Error: err.Error()}, nil + } + for _, val := range device.GetDevices() { err = val.LockNode(node, current) if err != nil { klog.ErrorS(err, "Failed to lock node", "node", args.Node, "device", val) - goto ReleaseNodeLocks + return releaseNodeLocks() } } err = util.PatchPodAnnotations(current, tmppatch) if err != nil { klog.ErrorS(err, "Failed to patch pod annotations", "pod", klog.KObj(current)) - goto ReleaseNodeLocks + return releaseNodeLocks() } err = s.kubeClient.CoreV1().Pods(args.PodNamespace).Bind(context.Background(), binding, metav1.CreateOptions{}) if err != nil { klog.ErrorS(err, "Failed to bind pod", "pod", args.PodName, "namespace", args.PodNamespace, "node", args.Node) - goto ReleaseNodeLocks + return releaseNodeLocks() } s.recordScheduleBindingResultEvent(current, EventReasonBindingSucceed, []string{args.Node}, nil) klog.InfoS("Successfully bound pod to node", "pod", args.PodName, "namespace", args.PodNamespace, "node", args.Node) return &extenderv1.ExtenderBindingResult{Error: ""}, nil - -ReleaseNodeLocks: - klog.InfoS("Release node locks", "node", args.Node) - for _, val := range device.GetDevices() { - val.ReleaseNodeLock(node, current) - } - s.recordScheduleBindingResultEvent(current, EventReasonBindingFailed, []string{}, err) - return &extenderv1.ExtenderBindingResult{Error: err.Error()}, nil } func (s *Scheduler) Filter(args extenderv1.ExtenderArgs) (*extenderv1.ExtenderFilterResult, error) {