mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-25 04:33:26 +00:00
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.
This commit is contained in:
parent
468aebc17f
commit
3d353f5122
@ -400,7 +400,7 @@ func GetPodTopologySpreadMetadata(pod *v1.Pod, allNodes []*schedulernodeinfo.Nod
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if len(constraints) == 0 {
|
if len(constraints) == 0 {
|
||||||
return nil, nil
|
return &PodTopologySpreadMetadata{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
var lock sync.Mutex
|
var lock sync.Mutex
|
||||||
|
@ -14,6 +14,7 @@ go_library(
|
|||||||
"//pkg/scheduler/nodeinfo:go_default_library",
|
"//pkg/scheduler/nodeinfo:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
|
||||||
|
"//vendor/k8s.io/klog:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import (
|
|||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
|
"k8s.io/klog"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
"k8s.io/kubernetes/pkg/scheduler/algorithm/priorities"
|
||||||
"k8s.io/kubernetes/pkg/scheduler/framework/plugins/migration"
|
"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.
|
// preFilterState computed at PreFilter and used at Filter.
|
||||||
type preFilterState struct {
|
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
|
meta *predicates.PodTopologySpreadMetadata
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,11 +121,9 @@ func (pl *PodTopologySpread) RemovePod(ctx context.Context, cycleState *framewor
|
|||||||
func getPodTopologySpreadMetadata(cycleState *framework.CycleState) (*predicates.PodTopologySpreadMetadata, error) {
|
func getPodTopologySpreadMetadata(cycleState *framework.CycleState) (*predicates.PodTopologySpreadMetadata, error) {
|
||||||
c, err := cycleState.Read(preFilterStateKey)
|
c, err := cycleState.Read(preFilterStateKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
// 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)
|
||||||
// It's possible that meta is set to nil intentionally.
|
|
||||||
if c == nil {
|
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user