@@ -105,11 +105,11 @@ func (paths *criticalPaths) update(tpVal string, num int32) {
105
105
}
106
106
}
107
107
108
- // evenPodsSpreadMetadata combines tpKeyToCriticalPaths and tpPairToMatchNum
108
+ // PodTopologySpreadMetadata combines tpKeyToCriticalPaths and tpPairToMatchNum
109
109
// to represent:
110
110
// (1) critical paths where the least pods are matched on each spread constraint.
111
111
// (2) number of pods matched on each spread constraint.
112
- type evenPodsSpreadMetadata struct {
112
+ type PodTopologySpreadMetadata struct {
113
113
constraints []topologySpreadConstraint
114
114
// We record 2 critical paths instead of all critical paths here.
115
115
// criticalPaths[0].matchNum always holds the minimum matching number.
@@ -309,10 +309,6 @@ func (m *podFitsResourcesMetadata) clone() *podFitsResourcesMetadata {
309
309
type predicateMetadata struct {
310
310
pod * v1.Pod
311
311
312
- // evenPodsSpreadMetadata holds info of the minimum match number on each topology spread constraint,
313
- // and the match number of all valid topology pairs.
314
- evenPodsSpreadMetadata * evenPodsSpreadMetadata
315
-
316
312
serviceAffinityMetadata * serviceAffinityMetadata
317
313
podFitsResourcesMetadata * podFitsResourcesMetadata
318
314
}
@@ -357,27 +353,8 @@ func (f *MetadataProducerFactory) GetPredicateMetadata(pod *v1.Pod, sharedLister
357
353
return nil
358
354
}
359
355
360
- var allNodes []* schedulernodeinfo.NodeInfo
361
- if sharedLister != nil {
362
- var err error
363
- allNodes , err = sharedLister .NodeInfos ().List ()
364
- if err != nil {
365
- klog .Errorf ("failed to list NodeInfos: %v" , err )
366
- return nil
367
- }
368
- }
369
-
370
- // evenPodsSpreadMetadata represents how existing pods match "pod"
371
- // on its spread constraints
372
- evenPodsSpreadMetadata , err := getEvenPodsSpreadMetadata (pod , allNodes )
373
- if err != nil {
374
- klog .Errorf ("Error calculating spreadConstraintsMap: %v" , err )
375
- return nil
376
- }
377
-
378
356
predicateMetadata := & predicateMetadata {
379
357
pod : pod ,
380
- evenPodsSpreadMetadata : evenPodsSpreadMetadata ,
381
358
podFitsResourcesMetadata : getPodFitsResourcesMetedata (pod ),
382
359
}
383
360
for predicateName , precomputeFunc := range predicateMetadataProducers {
@@ -414,22 +391,23 @@ func GetPodAffinityMetadata(pod *v1.Pod, allNodes []*schedulernodeinfo.NodeInfo,
414
391
}, nil
415
392
}
416
393
417
- func getEvenPodsSpreadMetadata (pod * v1.Pod , allNodes []* schedulernodeinfo.NodeInfo ) (* evenPodsSpreadMetadata , error ) {
394
+ // GetPodTopologySpreadMetadata computes pod topology spread metadata.
395
+ func GetPodTopologySpreadMetadata (pod * v1.Pod , allNodes []* schedulernodeinfo.NodeInfo ) (* PodTopologySpreadMetadata , error ) {
418
396
// We have feature gating in APIServer to strip the spec
419
397
// so don't need to re-check feature gate, just check length of constraints.
420
398
constraints , err := filterHardTopologySpreadConstraints (pod .Spec .TopologySpreadConstraints )
421
399
if err != nil {
422
400
return nil , err
423
401
}
424
402
if len (constraints ) == 0 {
425
- return nil , nil
403
+ return & PodTopologySpreadMetadata {} , nil
426
404
}
427
405
428
406
var lock sync.Mutex
429
407
430
408
// TODO(Huang-Wei): It might be possible to use "make(map[topologyPair]*int32)".
431
409
// In that case, need to consider how to init each tpPairToCount[pair] in an atomic fashion.
432
- m := evenPodsSpreadMetadata {
410
+ m := PodTopologySpreadMetadata {
433
411
constraints : constraints ,
434
412
tpKeyToCriticalPaths : make (map [string ]* criticalPaths , len (constraints )),
435
413
tpPairToMatchNum : make (map [topologyPair ]int32 ),
@@ -526,15 +504,17 @@ func (m topologyToMatchedTermCount) clone() topologyToMatchedTermCount {
526
504
return copy
527
505
}
528
506
529
- func (m * evenPodsSpreadMetadata ) addPod (addedPod , preemptorPod * v1.Pod , node * v1.Node ) {
530
- m .updatePod (addedPod , preemptorPod , node , 1 )
507
+ // AddPod updates the metadata with addedPod.
508
+ func (m * PodTopologySpreadMetadata ) AddPod (addedPod , preemptorPod * v1.Pod , node * v1.Node ) {
509
+ m .updateWithPod (addedPod , preemptorPod , node , 1 )
531
510
}
532
511
533
- func (m * evenPodsSpreadMetadata ) removePod (deletedPod , preemptorPod * v1.Pod , node * v1.Node ) {
534
- m .updatePod (deletedPod , preemptorPod , node , - 1 )
512
+ // RemovePod updates the metadata with deletedPod.
513
+ func (m * PodTopologySpreadMetadata ) RemovePod (deletedPod , preemptorPod * v1.Pod , node * v1.Node ) {
514
+ m .updateWithPod (deletedPod , preemptorPod , node , - 1 )
535
515
}
536
516
537
- func (m * evenPodsSpreadMetadata ) updatePod (updatedPod , preemptorPod * v1.Pod , node * v1.Node , delta int32 ) {
517
+ func (m * PodTopologySpreadMetadata ) updateWithPod (updatedPod , preemptorPod * v1.Pod , node * v1.Node , delta int32 ) {
538
518
if m == nil || updatedPod .Namespace != preemptorPod .Namespace || node == nil {
539
519
return
540
520
}
@@ -556,12 +536,13 @@ func (m *evenPodsSpreadMetadata) updatePod(updatedPod, preemptorPod *v1.Pod, nod
556
536
}
557
537
}
558
538
559
- func (m * evenPodsSpreadMetadata ) clone () * evenPodsSpreadMetadata {
560
- // c could be nil when EvenPodsSpread feature is disabled
539
+ // Clone makes a deep copy of PodTopologySpreadMetadata.
540
+ func (m * PodTopologySpreadMetadata ) Clone () * PodTopologySpreadMetadata {
541
+ // m could be nil when EvenPodsSpread feature is disabled
561
542
if m == nil {
562
543
return nil
563
544
}
564
- cp := evenPodsSpreadMetadata {
545
+ cp := PodTopologySpreadMetadata {
565
546
// constraints are shared because they don't change.
566
547
constraints : m .constraints ,
567
548
tpKeyToCriticalPaths : make (map [string ]* criticalPaths , len (m .tpKeyToCriticalPaths )),
@@ -584,7 +565,6 @@ func (meta *predicateMetadata) RemovePod(deletedPod *v1.Pod, node *v1.Node) erro
584
565
if deletedPodFullName == schedutil .GetPodFullName (meta .pod ) {
585
566
return fmt .Errorf ("deletedPod and meta.pod must not be the same" )
586
567
}
587
- meta .evenPodsSpreadMetadata .removePod (deletedPod , meta .pod , node )
588
568
meta .serviceAffinityMetadata .removePod (deletedPod , node )
589
569
590
570
return nil
@@ -601,10 +581,6 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, node *v1.Node) error {
601
581
return fmt .Errorf ("node not found" )
602
582
}
603
583
604
- // Update meta.evenPodsSpreadMetadata if meta.pod has hard spread constraints
605
- // and addedPod matches that
606
- meta .evenPodsSpreadMetadata .addPod (addedPod , meta .pod , node )
607
-
608
584
meta .serviceAffinityMetadata .addPod (addedPod , meta .pod , node )
609
585
610
586
return nil
@@ -616,7 +592,6 @@ func (meta *predicateMetadata) ShallowCopy() Metadata {
616
592
newPredMeta := & predicateMetadata {
617
593
pod : meta .pod ,
618
594
}
619
- newPredMeta .evenPodsSpreadMetadata = meta .evenPodsSpreadMetadata .clone ()
620
595
newPredMeta .serviceAffinityMetadata = meta .serviceAffinityMetadata .clone ()
621
596
newPredMeta .podFitsResourcesMetadata = meta .podFitsResourcesMetadata .clone ()
622
597
return (Metadata )(newPredMeta )
0 commit comments