diff --git a/pkg/scheduler/BUILD b/pkg/scheduler/BUILD index 49d1785867d..af02bae9fb2 100644 --- a/pkg/scheduler/BUILD +++ b/pkg/scheduler/BUILD @@ -11,6 +11,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/api/v1/pod:go_default_library", + "//pkg/apis/core/validation:go_default_library", "//pkg/features:go_default_library", "//pkg/scheduler/algorithmprovider:go_default_library", "//pkg/scheduler/apis/config:go_default_library", diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 7181e67ee3c..720882e5d37 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -35,6 +35,7 @@ import ( "k8s.io/client-go/tools/cache" "k8s.io/klog/v2" podutil "k8s.io/kubernetes/pkg/api/v1/pod" + "k8s.io/kubernetes/pkg/apis/core/validation" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" "k8s.io/kubernetes/pkg/scheduler/core" @@ -332,7 +333,8 @@ func (sched *Scheduler) recordSchedulingFailure(prof *profile.Profile, podInfo * } pod := podInfo.Pod - prof.Recorder.Eventf(pod, nil, v1.EventTypeWarning, "FailedScheduling", "Scheduling", err.Error()) + msg := truncateMessage(err.Error()) + prof.Recorder.Eventf(pod, nil, v1.EventTypeWarning, "FailedScheduling", "Scheduling", msg) if err := updatePod(sched.client, pod, &v1.PodCondition{ Type: v1.PodScheduled, Status: v1.ConditionFalse, @@ -343,6 +345,16 @@ func (sched *Scheduler) recordSchedulingFailure(prof *profile.Profile, podInfo * } } +// truncateMessage truncates a message if it hits the NoteLengthLimit. +func truncateMessage(message string) string { + max := validation.NoteLengthLimit + if len(message) <= max { + return message + } + suffix := " ..." + return message[:max-len(suffix)] + suffix +} + func updatePod(client clientset.Interface, pod *v1.Pod, condition *v1.PodCondition, nominatedNode string) error { klog.V(3).Infof("Updating pod condition for %s/%s to (%s==%s, Reason=%s)", pod.Namespace, pod.Name, condition.Type, condition.Status, condition.Reason) podCopy := pod.DeepCopy()