@@ -63,7 +63,7 @@ func (estimator *BinpackingNodeEstimator) Estimate(
6363 podInfos := calculatePodScore (pods , nodeTemplate )
6464 sort .Slice (podInfos , func (i , j int ) bool { return podInfos [i ].score > podInfos [j ].score })
6565
66- newNodeNames := make ([] string , 0 )
66+ newNodeNames := make (map [ string ] bool )
6767
6868 if err := estimator .clusterSnapshot .Fork (); err != nil {
6969 klog .Errorf ("Error while calling ClusterSnapshot.Fork; %v" , err )
@@ -80,16 +80,18 @@ func (estimator *BinpackingNodeEstimator) Estimate(
8080
8181 for _ , podInfo := range podInfos {
8282 found := false
83- for _ , nodeName := range newNodeNames {
84- if err := estimator .predicateChecker .CheckPredicates (estimator .clusterSnapshot , podInfo .pod , nodeName ); err == nil {
85- found = true
86- if err := estimator .clusterSnapshot .AddPod (podInfo .pod , nodeName ); err != nil {
87- klog .Errorf ("Error adding pod %v.%v to node %v in ClusterSnapshot; %v" , podInfo .pod .Namespace , podInfo .pod .Name , nodeName , err )
88- return 0
89- }
90- break
83+
84+ nodeName , err := estimator .predicateChecker .FitsAnyNodeMatching (estimator .clusterSnapshot , podInfo .pod , func (nodeInfo * schedulerframework.NodeInfo ) bool {
85+ return newNodeNames [nodeInfo .Node ().Name ]
86+ })
87+ if err == nil {
88+ found = true
89+ if err := estimator .clusterSnapshot .AddPod (podInfo .pod , nodeName ); err != nil {
90+ klog .Errorf ("Error adding pod %v.%v to node %v in ClusterSnapshot; %v" , podInfo .pod .Namespace , podInfo .pod .Name , nodeName , err )
91+ return 0
9192 }
9293 }
94+
9395 if ! found {
9496 // Add new node
9597 newNodeName , err := estimator .addNewNodeToSnapshot (nodeTemplate , newNodeNameTimestamp , newNodeNameIndex )
@@ -103,7 +105,7 @@ func (estimator *BinpackingNodeEstimator) Estimate(
103105 klog .Errorf ("Error adding pod %v.%v to node %v in ClusterSnapshot; %v" , podInfo .pod .Namespace , podInfo .pod .Name , newNodeName , err )
104106 return 0
105107 }
106- newNodeNames = append ( newNodeNames , newNodeName )
108+ newNodeNames [ newNodeName ] = true
107109 }
108110 }
109111 return len (newNodeNames )
0 commit comments