Skip to content

Commit 6a98c93

Browse files
Add MetadataProducerFactory for predicates
Signed-off-by: Aldo Culquicondor <[email protected]>
1 parent b2fb0f7 commit 6a98c93

34 files changed

+220
-184
lines changed

pkg/controller/daemon/daemon_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1318,7 +1318,7 @@ func NewPod(ds *apps.DaemonSet, nodeName string) *v1.Pod {
13181318
// - PodFitsHost: checks pod's NodeName against node
13191319
// - PodMatchNodeSelector: checks pod's NodeSelector and NodeAffinity against node
13201320
// - PodToleratesNodeTaints: exclude tainted node unless pod has specific toleration
1321-
func checkNodeFitness(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
1321+
func checkNodeFitness(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
13221322
var predicateFails []predicates.PredicateFailureReason
13231323
fit, reasons, err := predicates.PodFitsHost(pod, meta, nodeInfo)
13241324
if err != nil {

pkg/scheduler/algorithm/predicates/csi_volume_predicate.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func getVolumeLimits(nodeInfo *schedulernodeinfo.NodeInfo, csiNode *storagev1bet
8787
}
8888

8989
func (c *CSIMaxVolumeLimitChecker) attachableLimitPredicate(
90-
pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
90+
pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
9191
// If the new pod doesn't have any volume attached to it, the predicate will always be true
9292
if len(pod.Spec.Volumes) == 0 {
9393
return true, nil, nil

pkg/scheduler/algorithm/predicates/csi_volume_predicate_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -458,7 +458,8 @@ func TestCSIVolumeCountPredicate(t *testing.T) {
458458
getFakeCSIPVCLister(test.filterName, "csi-sc", test.driverNames...),
459459
getFakeCSIStorageClassLister("csi-sc", test.driverNames[0]))
460460

461-
fits, reasons, err := pred(test.newPod, GetPredicateMetadata(test.newPod, nil), node)
461+
factory := &MetadataProducerFactory{}
462+
fits, reasons, err := pred(test.newPod, factory.GetPredicateMetadata(test.newPod, nil), node)
462463
if err != nil {
463464
t.Errorf("Using allocatable [%s]%s: unexpected error: %v", test.filterName, test.test, err)
464465
}

pkg/scheduler/algorithm/predicates/max_attachable_volume_predicate_test.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,8 @@ func TestVolumeCountConflicts(t *testing.T) {
858858
getFakePVLister(test.filterName),
859859
getFakePVCLister(test.filterName))
860860

861-
fits, reasons, err := pred(test.newPod, GetPredicateMetadata(test.newPod, nil), node)
861+
factory := &MetadataProducerFactory{}
862+
fits, reasons, err := pred(test.newPod, factory.GetPredicateMetadata(test.newPod, nil), node)
862863
if err != nil {
863864
t.Errorf("[%s]%s: unexpected error: %v", test.filterName, test.test, err)
864865
}
@@ -880,7 +881,8 @@ func TestVolumeCountConflicts(t *testing.T) {
880881
getFakeStorageClassLister(test.filterName),
881882
getFakePVLister(test.filterName),
882883
getFakePVCLister(test.filterName))
883-
fits, reasons, err := pred(test.newPod, GetPredicateMetadata(test.newPod, nil), node)
884+
factory := &MetadataProducerFactory{}
885+
fits, reasons, err := pred(test.newPod, factory.GetPredicateMetadata(test.newPod, nil), node)
884886
if err != nil {
885887
t.Errorf("Using allocatable [%s]%s: unexpected error: %v", test.filterName, test.test, err)
886888
}

pkg/scheduler/algorithm/predicates/metadata.go

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,15 @@ import (
3535
schedutil "k8s.io/kubernetes/pkg/scheduler/util"
3636
)
3737

38-
// PredicateMetadata interface represents anything that can access a predicate metadata.
39-
type PredicateMetadata interface {
40-
ShallowCopy() PredicateMetadata
38+
// Metadata interface represents anything that can access a predicate metadata.
39+
type Metadata interface {
40+
ShallowCopy() Metadata
4141
AddPod(addedPod *v1.Pod, node *v1.Node) error
4242
RemovePod(deletedPod *v1.Pod, node *v1.Node) error
4343
}
4444

45-
// PredicateMetadataProducer is a function that computes predicate metadata for a given pod.
46-
type PredicateMetadataProducer func(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) PredicateMetadata
45+
// MetadataProducer is a function that computes predicate metadata for a given pod.
46+
type MetadataProducer func(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) Metadata
4747

4848
// AntiAffinityTerm's topology key value used in predicate metadata
4949
type topologyPair struct {
@@ -300,27 +300,27 @@ type predicateMetadata struct {
300300
podFitsHostPortsMetadata *podFitsHostPortsMetadata
301301
}
302302

303-
// Ensure that predicateMetadata implements algorithm.PredicateMetadata.
304-
var _ PredicateMetadata = &predicateMetadata{}
303+
// Ensure that predicateMetadata implements algorithm.Metadata.
304+
var _ Metadata = &predicateMetadata{}
305305

306306
// predicateMetadataProducer function produces predicate metadata. It is stored in a global variable below
307-
// and used to modify the return values of PredicateMetadataProducer
307+
// and used to modify the return values of MetadataProducer
308308
type predicateMetadataProducer func(pm *predicateMetadata)
309309

310310
var predicateMetadataProducers = make(map[string]predicateMetadataProducer)
311311

312-
// RegisterPredicateMetadataProducer registers a PredicateMetadataProducer.
312+
// RegisterPredicateMetadataProducer registers a MetadataProducer.
313313
func RegisterPredicateMetadataProducer(predicateName string, precomp predicateMetadataProducer) {
314314
predicateMetadataProducers[predicateName] = precomp
315315
}
316316

317-
// EmptyPredicateMetadataProducer returns a no-op MetadataProducer type.
318-
func EmptyPredicateMetadataProducer(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) PredicateMetadata {
317+
// EmptyMetadataProducer returns a no-op MetadataProducer type.
318+
func EmptyMetadataProducer(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) Metadata {
319319
return nil
320320
}
321321

322322
// RegisterPredicateMetadataProducerWithExtendedResourceOptions registers a
323-
// PredicateMetadataProducer that creates predicate metadata with the provided
323+
// MetadataProducer that creates predicate metadata with the provided
324324
// options for extended resources.
325325
//
326326
// See the comments in "predicateMetadata" for the explanation of the options.
@@ -330,8 +330,11 @@ func RegisterPredicateMetadataProducerWithExtendedResourceOptions(ignoredExtende
330330
})
331331
}
332332

333+
// MetadataProducerFactory is a factory to produce Metadata.
334+
type MetadataProducerFactory struct{}
335+
333336
// GetPredicateMetadata returns the predicateMetadata which will be used by various predicates.
334-
func GetPredicateMetadata(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) PredicateMetadata {
337+
func (f *MetadataProducerFactory) GetPredicateMetadata(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) Metadata {
335338
// If we cannot compute metadata, just return nil
336339
if pod == nil {
337340
return nil
@@ -675,7 +678,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, node *v1.Node) error {
675678

676679
// ShallowCopy copies a metadata struct into a new struct and creates a copy of
677680
// its maps and slices, but it does not copy the contents of pointer values.
678-
func (meta *predicateMetadata) ShallowCopy() PredicateMetadata {
681+
func (meta *predicateMetadata) ShallowCopy() Metadata {
679682
newPredMeta := &predicateMetadata{
680683
pod: meta.pod,
681684
podBestEffort: meta.podBestEffort,
@@ -685,7 +688,7 @@ func (meta *predicateMetadata) ShallowCopy() PredicateMetadata {
685688
newPredMeta.evenPodsSpreadMetadata = meta.evenPodsSpreadMetadata.clone()
686689
newPredMeta.serviceAffinityMetadata = meta.serviceAffinityMetadata.clone()
687690
newPredMeta.podFitsResourcesMetadata = meta.podFitsResourcesMetadata.clone()
688-
return (PredicateMetadata)(newPredMeta)
691+
return (Metadata)(newPredMeta)
689692
}
690693

691694
type affinityTermProperties struct {

pkg/scheduler/algorithm/predicates/metadata_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,8 @@ func TestPredicateMetadata_AddRemovePod(t *testing.T) {
358358
s := nodeinfosnapshot.NewSnapshot(pods, test.nodes)
359359
_, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), nil)
360360
RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
361-
meta := GetPredicateMetadata(test.pendingPod, s)
361+
factory := &MetadataProducerFactory{}
362+
meta := factory.GetPredicateMetadata(test.pendingPod, s)
362363
return meta.(*predicateMetadata), s.NodeInfoMap
363364
}
364365

0 commit comments

Comments
 (0)