diff --git a/pkg/scheduler/algorithm/predicates/metadata.go b/pkg/scheduler/algorithm/predicates/metadata.go index 90c423ff7e3..017d12bc39a 100644 --- a/pkg/scheduler/algorithm/predicates/metadata.go +++ b/pkg/scheduler/algorithm/predicates/metadata.go @@ -400,7 +400,7 @@ func GetPodTopologySpreadMetadata(pod *v1.Pod, allNodes []*schedulernodeinfo.Nod return nil, err } if len(constraints) == 0 { - return nil, nil + return &PodTopologySpreadMetadata{}, nil } var lock sync.Mutex diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/BUILD b/pkg/scheduler/framework/plugins/podtopologyspread/BUILD index b4331710034..362b21b493a 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/BUILD +++ b/pkg/scheduler/framework/plugins/podtopologyspread/BUILD @@ -14,6 +14,7 @@ go_library( "//pkg/scheduler/nodeinfo:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/klog:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/pod_topology_spread.go b/pkg/scheduler/framework/plugins/podtopologyspread/pod_topology_spread.go index 2781f434a0f..5b50ee7e856 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/pod_topology_spread.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/pod_topology_spread.go @@ -22,6 +22,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/klog" "k8s.io/kubernetes/pkg/scheduler/algorithm/predicates" "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration" @@ -55,6 +56,8 @@ func (pl *PodTopologySpread) Name() string { // preFilterState computed at PreFilter and used at Filter. type preFilterState struct { + // `nil` represents the meta is not set at all (in PreFilter phase) + // An empty `PodTopologySpreadMetadata` object denotes it's a legit meta and is set in PreFilter phase. meta *predicates.PodTopologySpreadMetadata } @@ -118,11 +121,9 @@ func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framewor func getPodTopologySpreadMetadata(cycleState *framework.CycleState) (*predicates.PodTopologySpreadMetadata, error) { c, err := cycleState.Read(preFilterStateKey) if err != nil { - return nil, err - } - - // It's possible that meta is set to nil intentionally. - if c == nil { + // The metadata wasn't pre-computed in prefilter. We ignore the error for now since + // we are able to handle that by computing it again (e.g. in Filter()). + klog.Error(err) return nil, nil }