mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 14:37:00 +00:00
Merge pull request #111999 from kerthcet/refactor/handle-failure
fix error type when handling failures in scheduler
This commit is contained in:
commit
04f8a5c41a
@ -122,6 +122,7 @@ func (sched *Scheduler) schedulingCycle(ctx context.Context, state *framework.Cy
|
|||||||
// will fit due to the preemption. It is also possible that a different pod will schedule
|
// will fit due to the preemption. It is also possible that a different pod will schedule
|
||||||
// into the resources that were preempted, but this is harmless.
|
// into the resources that were preempted, but this is harmless.
|
||||||
var nominatingInfo *framework.NominatingInfo
|
var nominatingInfo *framework.NominatingInfo
|
||||||
|
reason := v1.PodReasonUnschedulable
|
||||||
if fitError, ok := err.(*framework.FitError); ok {
|
if fitError, ok := err.(*framework.FitError); ok {
|
||||||
if !fwk.HasPostFilterPlugins() {
|
if !fwk.HasPostFilterPlugins() {
|
||||||
klog.V(3).InfoS("No PostFilter plugins are registered, so no preemption will be performed")
|
klog.V(3).InfoS("No PostFilter plugins are registered, so no preemption will be performed")
|
||||||
@ -150,8 +151,9 @@ func (sched *Scheduler) schedulingCycle(ctx context.Context, state *framework.Cy
|
|||||||
nominatingInfo = clearNominatedNode
|
nominatingInfo = clearNominatedNode
|
||||||
klog.ErrorS(err, "Error selecting node for pod", "pod", klog.KObj(pod))
|
klog.ErrorS(err, "Error selecting node for pod", "pod", klog.KObj(pod))
|
||||||
metrics.PodScheduleError(fwk.ProfileName(), metrics.SinceInSeconds(start))
|
metrics.PodScheduleError(fwk.ProfileName(), metrics.SinceInSeconds(start))
|
||||||
|
reason = SchedulerError
|
||||||
}
|
}
|
||||||
sched.FailureHandler(ctx, fwk, podInfo, err, v1.PodReasonUnschedulable, nominatingInfo)
|
sched.FailureHandler(ctx, fwk, podInfo, err, reason, nominatingInfo)
|
||||||
return ScheduleResult{}, nil
|
return ScheduleResult{}, nil
|
||||||
}
|
}
|
||||||
metrics.SchedulingAlgorithmLatency.Observe(metrics.SinceInSeconds(start))
|
metrics.SchedulingAlgorithmLatency.Observe(metrics.SinceInSeconds(start))
|
||||||
|
@ -581,10 +581,14 @@ func TestPreFilterPlugin(t *testing.T) {
|
|||||||
t.Errorf("Error while creating a test pod: %v", err)
|
t.Errorf("Error while creating a test pod: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if test.reject || test.fail {
|
if test.reject {
|
||||||
if err = waitForPodUnschedulable(testCtx.ClientSet, pod); err != nil {
|
if err = waitForPodUnschedulable(testCtx.ClientSet, pod); err != nil {
|
||||||
t.Errorf("Didn't expect the pod to be scheduled. error: %v", err)
|
t.Errorf("Didn't expect the pod to be scheduled. error: %v", err)
|
||||||
}
|
}
|
||||||
|
} else if test.fail {
|
||||||
|
if err = wait.Poll(10*time.Millisecond, 30*time.Second, podSchedulingError(testCtx.ClientSet, pod.Namespace, pod.Name)); err != nil {
|
||||||
|
t.Errorf("Expected a scheduling error, but got: %v", err)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if err = testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
if err = testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
||||||
t.Errorf("Expected the pod to be scheduled. error: %v", err)
|
t.Errorf("Expected the pod to be scheduled. error: %v", err)
|
||||||
@ -790,8 +794,8 @@ func TestScorePlugin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if test.fail {
|
if test.fail {
|
||||||
if err = waitForPodUnschedulable(testCtx.ClientSet, pod); err != nil {
|
if err = wait.Poll(10*time.Millisecond, 30*time.Second, podSchedulingError(testCtx.ClientSet, pod.Namespace, pod.Name)); err != nil {
|
||||||
t.Errorf("Didn't expect the pod to be scheduled. error: %v", err)
|
t.Errorf("Expected a scheduling error, but got: %v", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err = testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
if err = testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
||||||
@ -2010,8 +2014,8 @@ func TestFilterPlugin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if test.fail {
|
if test.fail {
|
||||||
if err = wait.Poll(10*time.Millisecond, 30*time.Second, podUnschedulable(testCtx.ClientSet, pod.Namespace, pod.Name)); err != nil {
|
if err = wait.Poll(10*time.Millisecond, 30*time.Second, podSchedulingError(testCtx.ClientSet, pod.Namespace, pod.Name)); err != nil {
|
||||||
t.Errorf("Didn't expect the pod to be scheduled.")
|
t.Errorf("Expected a scheduling error, but got: %v", err)
|
||||||
}
|
}
|
||||||
if filterPlugin.numFilterCalled < 1 {
|
if filterPlugin.numFilterCalled < 1 {
|
||||||
t.Errorf("Expected the filter plugin to be called at least 1 time, but got %v.", filterPlugin.numFilterCalled)
|
t.Errorf("Expected the filter plugin to be called at least 1 time, but got %v.", filterPlugin.numFilterCalled)
|
||||||
@ -2068,8 +2072,8 @@ func TestPreScorePlugin(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if test.fail {
|
if test.fail {
|
||||||
if err = waitForPodUnschedulable(testCtx.ClientSet, pod); err != nil {
|
if err = wait.Poll(10*time.Millisecond, 30*time.Second, podSchedulingError(testCtx.ClientSet, pod.Namespace, pod.Name)); err != nil {
|
||||||
t.Errorf("Didn't expect the pod to be scheduled. error: %v", err)
|
t.Errorf("Expected a scheduling error, but got: %v", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err = testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
if err = testutils.WaitForPodToSchedule(testCtx.ClientSet, pod); err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user