Skip to content

Commit 3d353f5

Browse files
committed
Update semantics of EvenPodsSpread metadata object
- Now `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.
1 parent 468aebc commit 3d353f5

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

pkg/scheduler/algorithm/predicates/metadata.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ func GetPodTopologySpreadMetadata(pod *v1.Pod, allNodes []*schedulernodeinfo.Nod
400400
return nil, err
401401
}
402402
if len(constraints) == 0 {
403-
return nil, nil
403+
return &PodTopologySpreadMetadata{}, nil
404404
}
405405

406406
var lock sync.Mutex

pkg/scheduler/framework/plugins/podtopologyspread/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ go_library(
1414
"//pkg/scheduler/nodeinfo:go_default_library",
1515
"//staging/src/k8s.io/api/core/v1:go_default_library",
1616
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
17+
"//vendor/k8s.io/klog:go_default_library",
1718
],
1819
)
1920

pkg/scheduler/framework/plugins/podtopologyspread/pod_topology_spread.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import (
2222

2323
"k8s.io/api/core/v1"
2424
"k8s.io/apimachinery/pkg/runtime"
25+
"k8s.io/klog"
2526
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
2627
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
2728
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
@@ -55,6 +56,8 @@ func (pl *PodTopologySpread) Name() string {
5556

5657
// preFilterState computed at PreFilter and used at Filter.
5758
type preFilterState struct {
59+
// `nil` represents the meta is not set at all (in PreFilter phase)
60+
// An empty `PodTopologySpreadMetadata` object denotes it's a legit meta and is set in PreFilter phase.
5861
meta *predicates.PodTopologySpreadMetadata
5962
}
6063

@@ -118,11 +121,9 @@ func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framewor
118121
func getPodTopologySpreadMetadata(cycleState *framework.CycleState) (*predicates.PodTopologySpreadMetadata, error) {
119122
c, err := cycleState.Read(preFilterStateKey)
120123
if err != nil {
121-
return nil, err
122-
}
123-
124-
// It's possible that meta is set to nil intentionally.
125-
if c == nil {
124+
// The metadata wasn't pre-computed in prefilter. We ignore the error for now since
125+
// we are able to handle that by computing it again (e.g. in Filter()).
126+
klog.Error(err)
126127
return nil, nil
127128
}
128129

0 commit comments

Comments
 (0)