diff --git a/pkg/scheduler/frameworkext/eventhandlers/reservation_handler.go b/pkg/scheduler/frameworkext/eventhandlers/reservation_handler.go index 4110a45e9..eec33205c 100644 --- a/pkg/scheduler/frameworkext/eventhandlers/reservation_handler.go +++ b/pkg/scheduler/frameworkext/eventhandlers/reservation_handler.go @@ -65,20 +65,18 @@ func MakeReservationErrorHandler( return true } - schedulingErr := status.AsError() - // if the pod is not a reserve pod, use the default error handler // If the Pod failed to schedule or no post-filter plugins, should remove exist NominatedReservation of the Pod. - if _, ok := schedulingErr.(*framework.FitError); !ok || !fwk.HasPostFilterPlugins() { - if extendedHandle, ok := fwk.(frameworkext.ExtendedHandle); ok { - if !reservationutil.IsReservePod(pod) { - extendedHandle.GetReservationNominator().RemoveNominatedReservations(pod) - } else { - extendedHandle.GetReservationNominator().DeleteNominatedReservePod(pod) - } + if extendedHandle, ok := fwk.(frameworkext.ExtendedHandle); ok { + if !reservationutil.IsReservePod(pod) { + extendedHandle.GetReservationNominator().RemoveNominatedReservations(pod) + } else { + extendedHandle.GetReservationNominator().DeleteNominatedReservePod(pod) } } + schedulingErr := status.AsError() + if _, reserveAffExist := pod.Annotations[extension.AnnotationReservationAffinity]; reserveAffExist { // for pod specified reservation affinity, export new event on reservation level reservationLevelMsg, hasReservation := generatePodEventOnReservationLevel(schedulingErr.Error()) @@ -127,7 +125,13 @@ func addNominatedReservation(f framework.Framework, podInfo *framework.QueuedPod if reservationNominator == nil { return } - reservationNominator.AddNominatedReservePod(podInfo.Pod, nominatingInfo.NominatedNodeName) + var nodeName string + if nominatingInfo.Mode() == framework.ModeOverride { + nodeName = nominatingInfo.NominatedNodeName + } else if nominatingInfo.Mode() == framework.ModeNoop { + nodeName = podInfo.Pod.Status.NominatedNodeName + } + reservationNominator.AddNominatedReservePod(podInfo.Pod, nodeName) } // input: diff --git a/pkg/scheduler/frameworkext/framework_extender.go b/pkg/scheduler/frameworkext/framework_extender.go index e1533243b..158a665e9 100644 --- a/pkg/scheduler/frameworkext/framework_extender.go +++ b/pkg/scheduler/frameworkext/framework_extender.go @@ -225,15 +225,6 @@ func (ext *frameworkExtenderImpl) RunFilterPluginsWithNominatedPods(ctx context. return status } -func (ext *frameworkExtenderImpl) RunPostFilterPlugins(ctx context.Context, state *framework.CycleState, pod *corev1.Pod, filteredNodeStatusMap framework.NodeToStatusMap) (*framework.PostFilterResult, *framework.Status) { - result, status := ext.Framework.RunPostFilterPlugins(ctx, state, pod, filteredNodeStatusMap) - if result == nil || result.NominatingInfo.NominatedNodeName == "" { - ext.GetReservationNominator().RemoveNominatedReservations(pod) - ext.GetReservationNominator().DeleteNominatedReservePod(pod) - } - return result, status -} - func (ext *frameworkExtenderImpl) RunScorePlugins(ctx context.Context, state *framework.CycleState, pod *corev1.Pod, nodes []*corev1.Node) ([]framework.NodePluginScores, *framework.Status) { for _, pl := range ext.configuredPlugins.Score.Enabled { transformer := ext.scoreTransformers[pl.Name]