diff --git a/pkg/scheduler/algorithm/predicates/metadata.go b/pkg/scheduler/algorithm/predicates/metadata.go index 971db1bf6c3..1a3dcd96b6d 100644 --- a/pkg/scheduler/algorithm/predicates/metadata.go +++ b/pkg/scheduler/algorithm/predicates/metadata.go @@ -37,7 +37,7 @@ import ( // PredicateMetadata interface represents anything that can access a predicate metadata. type PredicateMetadata interface { ShallowCopy() PredicateMetadata - AddPod(addedPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) error + AddPod(addedPod *v1.Pod, node *v1.Node) error RemovePod(deletedPod *v1.Pod, node *v1.Node) error } @@ -350,8 +350,10 @@ func NodeLabelsMatchSpreadConstraints(nodeLabels map[string]string, constraints // returns a pointer to a new topologyPairsMaps func newTopologyPairsMaps() *topologyPairsMaps { - return &topologyPairsMaps{topologyPairToPods: make(map[topologyPair]podSet), - podToTopologyPairs: make(map[string]topologyPairSet)} + return &topologyPairsMaps{ + topologyPairToPods: make(map[topologyPair]podSet), + podToTopologyPairs: make(map[string]topologyPairSet), + } } func (m *topologyPairsMaps) addTopologyPair(pair topologyPair, pod *v1.Pod) { @@ -478,18 +480,18 @@ func (meta *predicateMetadata) RemovePod(deletedPod *v1.Pod, node *v1.Node) erro return nil } -// AddPod changes predicateMetadata assuming that `newPod` is added to the +// AddPod changes predicateMetadata assuming that the given `addedPod` is added to the // system. -func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodeinfo.NodeInfo) error { +func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, node *v1.Node) error { addedPodFullName := schedutil.GetPodFullName(addedPod) if addedPodFullName == schedutil.GetPodFullName(meta.pod) { return fmt.Errorf("addedPod and meta.pod must not be the same") } - if nodeInfo.Node() == nil { - return fmt.Errorf("invalid node in nodeInfo") + if node == nil { + return fmt.Errorf("node not found") } // Add matching anti-affinity terms of the addedPod to the map. - topologyPairsMaps, err := getMatchingAntiAffinityTopologyPairsOfPod(meta.pod, addedPod, nodeInfo.Node()) + topologyPairsMaps, err := getMatchingAntiAffinityTopologyPairsOfPod(meta.pod, addedPod, node) if err != nil { return err } @@ -498,14 +500,13 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodei affinity := meta.pod.Spec.Affinity podNodeName := addedPod.Spec.NodeName if affinity != nil && len(podNodeName) > 0 { - podNode := nodeInfo.Node() // It is assumed that when the added pod matches affinity of the meta.pod, all the terms must match, // this should be changed when the implementation of targetPodMatchesAffinityOfPod/podMatchesAffinityTermProperties // is changed if targetPodMatchesAffinityOfPod(meta.pod, addedPod) { affinityTerms := GetPodAffinityTerms(affinity.PodAffinity) for _, term := range affinityTerms { - if topologyValue, ok := podNode.Labels[term.TopologyKey]; ok { + if topologyValue, ok := node.Labels[term.TopologyKey]; ok { pair := topologyPair{key: term.TopologyKey, value: topologyValue} meta.topologyPairsPotentialAffinityPods.addTopologyPair(pair, addedPod) } @@ -514,7 +515,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodei if targetPodMatchesAntiAffinityOfPod(meta.pod, addedPod) { antiAffinityTerms := GetPodAntiAffinityTerms(affinity.PodAntiAffinity) for _, term := range antiAffinityTerms { - if topologyValue, ok := podNode.Labels[term.TopologyKey]; ok { + if topologyValue, ok := node.Labels[term.TopologyKey]; ok { pair := topologyPair{key: term.TopologyKey, value: topologyValue} meta.topologyPairsPotentialAntiAffinityPods.addTopologyPair(pair, addedPod) } @@ -523,7 +524,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, nodeInfo *schedulernodei } // Update meta.podSpreadCache if meta.pod has hard spread constraints // and addedPod matches that - if err := meta.podSpreadCache.addPod(addedPod, meta.pod, nodeInfo.Node()); err != nil { + if err := meta.podSpreadCache.addPod(addedPod, meta.pod, node); err != nil { return err } diff --git a/pkg/scheduler/algorithm/predicates/metadata_test.go b/pkg/scheduler/algorithm/predicates/metadata_test.go index 51ff3d7d7a2..ea7febbd1df 100644 --- a/pkg/scheduler/algorithm/predicates/metadata_test.go +++ b/pkg/scheduler/algorithm/predicates/metadata_test.go @@ -375,7 +375,7 @@ func TestPredicateMetadata_AddRemovePod(t *testing.T) { existingPodsMeta1, nodeInfoMap := getMeta(st.FakePodLister(test.existingPods)) // Add test.addedPod to existingPodsMeta1 and make sure meta is equal to allPodsMeta nodeInfo := nodeInfoMap[test.addedPod.Spec.NodeName] - if err := existingPodsMeta1.AddPod(test.addedPod, nodeInfo); err != nil { + if err := existingPodsMeta1.AddPod(test.addedPod, nodeInfo.Node()); err != nil { t.Errorf("error adding pod to meta: %v", err) } if err := predicateMetadataEquivalent(allPodsMeta, existingPodsMeta1); err != nil { diff --git a/pkg/scheduler/core/generic_scheduler.go b/pkg/scheduler/core/generic_scheduler.go index 276aadf5127..12092701f0d 100644 --- a/pkg/scheduler/core/generic_scheduler.go +++ b/pkg/scheduler/core/generic_scheduler.go @@ -597,7 +597,7 @@ func addNominatedPods(pod *v1.Pod, meta predicates.PredicateMetadata, if podutil.GetPodPriority(p) >= podutil.GetPodPriority(pod) && p.UID != pod.UID { nodeInfoOut.AddPod(p) if metaOut != nil { - if err := metaOut.AddPod(p, nodeInfoOut); err != nil { + if err := metaOut.AddPod(p, nodeInfoOut.Node()); err != nil { klog.Warningf("unable to add pod, nominated pod %s, incoming pod %s: %v", p.Name, pod.Name, err) } } @@ -1128,7 +1128,7 @@ func (g *genericScheduler) selectVictimsOnNode( addPod := func(ap *v1.Pod) error { nodeInfoCopy.AddPod(ap) if meta != nil { - if err := meta.AddPod(ap, nodeInfoCopy); err != nil { + if err := meta.AddPod(ap, nodeInfoCopy.Node()); err != nil { return err } }