mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Add MetadataProducerFactory for predicates
Signed-off-by: Aldo Culquicondor <acondor@google.com>
This commit is contained in:
		@@ -1318,7 +1318,7 @@ func NewPod(ds *apps.DaemonSet, nodeName string) *v1.Pod {
 | 
				
			|||||||
//   - PodFitsHost: checks pod's NodeName against node
 | 
					//   - PodFitsHost: checks pod's NodeName against node
 | 
				
			||||||
//   - PodMatchNodeSelector: checks pod's NodeSelector and NodeAffinity against node
 | 
					//   - PodMatchNodeSelector: checks pod's NodeSelector and NodeAffinity against node
 | 
				
			||||||
//   - PodToleratesNodeTaints: exclude tainted node unless pod has specific toleration
 | 
					//   - PodToleratesNodeTaints: exclude tainted node unless pod has specific toleration
 | 
				
			||||||
func checkNodeFitness(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
					func checkNodeFitness(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
				
			||||||
	var predicateFails []predicates.PredicateFailureReason
 | 
						var predicateFails []predicates.PredicateFailureReason
 | 
				
			||||||
	fit, reasons, err := predicates.PodFitsHost(pod, meta, nodeInfo)
 | 
						fit, reasons, err := predicates.PodFitsHost(pod, meta, nodeInfo)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -87,7 +87,7 @@ func getVolumeLimits(nodeInfo *schedulernodeinfo.NodeInfo, csiNode *storagev1bet
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *CSIMaxVolumeLimitChecker) attachableLimitPredicate(
 | 
					func (c *CSIMaxVolumeLimitChecker) attachableLimitPredicate(
 | 
				
			||||||
	pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
						pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	// If the new pod doesn't have any volume attached to it, the predicate will always be true
 | 
						// If the new pod doesn't have any volume attached to it, the predicate will always be true
 | 
				
			||||||
	if len(pod.Spec.Volumes) == 0 {
 | 
						if len(pod.Spec.Volumes) == 0 {
 | 
				
			||||||
		return true, nil, nil
 | 
							return true, nil, nil
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -458,7 +458,8 @@ func TestCSIVolumeCountPredicate(t *testing.T) {
 | 
				
			|||||||
				getFakeCSIPVCLister(test.filterName, "csi-sc", test.driverNames...),
 | 
									getFakeCSIPVCLister(test.filterName, "csi-sc", test.driverNames...),
 | 
				
			||||||
				getFakeCSIStorageClassLister("csi-sc", test.driverNames[0]))
 | 
									getFakeCSIStorageClassLister("csi-sc", test.driverNames[0]))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			fits, reasons, err := pred(test.newPod, GetPredicateMetadata(test.newPod, nil), node)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := pred(test.newPod, factory.GetPredicateMetadata(test.newPod, nil), node)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("Using allocatable [%s]%s: unexpected error: %v", test.filterName, test.test, err)
 | 
									t.Errorf("Using allocatable [%s]%s: unexpected error: %v", test.filterName, test.test, err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -858,7 +858,8 @@ func TestVolumeCountConflicts(t *testing.T) {
 | 
				
			|||||||
			getFakePVLister(test.filterName),
 | 
								getFakePVLister(test.filterName),
 | 
				
			||||||
			getFakePVCLister(test.filterName))
 | 
								getFakePVCLister(test.filterName))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		fits, reasons, err := pred(test.newPod, GetPredicateMetadata(test.newPod, nil), node)
 | 
							factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
							fits, reasons, err := pred(test.newPod, factory.GetPredicateMetadata(test.newPod, nil), node)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Errorf("[%s]%s: unexpected error: %v", test.filterName, test.test, err)
 | 
								t.Errorf("[%s]%s: unexpected error: %v", test.filterName, test.test, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -880,7 +881,8 @@ func TestVolumeCountConflicts(t *testing.T) {
 | 
				
			|||||||
			getFakeStorageClassLister(test.filterName),
 | 
								getFakeStorageClassLister(test.filterName),
 | 
				
			||||||
			getFakePVLister(test.filterName),
 | 
								getFakePVLister(test.filterName),
 | 
				
			||||||
			getFakePVCLister(test.filterName))
 | 
								getFakePVCLister(test.filterName))
 | 
				
			||||||
		fits, reasons, err := pred(test.newPod, GetPredicateMetadata(test.newPod, nil), node)
 | 
							factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
							fits, reasons, err := pred(test.newPod, factory.GetPredicateMetadata(test.newPod, nil), node)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			t.Errorf("Using allocatable [%s]%s: unexpected error: %v", test.filterName, test.test, err)
 | 
								t.Errorf("Using allocatable [%s]%s: unexpected error: %v", test.filterName, test.test, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,15 +35,15 @@ import (
 | 
				
			|||||||
	schedutil "k8s.io/kubernetes/pkg/scheduler/util"
 | 
						schedutil "k8s.io/kubernetes/pkg/scheduler/util"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PredicateMetadata interface represents anything that can access a predicate metadata.
 | 
					// Metadata interface represents anything that can access a predicate metadata.
 | 
				
			||||||
type PredicateMetadata interface {
 | 
					type Metadata interface {
 | 
				
			||||||
	ShallowCopy() PredicateMetadata
 | 
						ShallowCopy() Metadata
 | 
				
			||||||
	AddPod(addedPod *v1.Pod, node *v1.Node) error
 | 
						AddPod(addedPod *v1.Pod, node *v1.Node) error
 | 
				
			||||||
	RemovePod(deletedPod *v1.Pod, node *v1.Node) error
 | 
						RemovePod(deletedPod *v1.Pod, node *v1.Node) error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PredicateMetadataProducer is a function that computes predicate metadata for a given pod.
 | 
					// MetadataProducer is a function that computes predicate metadata for a given pod.
 | 
				
			||||||
type PredicateMetadataProducer func(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) PredicateMetadata
 | 
					type MetadataProducer func(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) Metadata
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AntiAffinityTerm's topology key value used in predicate metadata
 | 
					// AntiAffinityTerm's topology key value used in predicate metadata
 | 
				
			||||||
type topologyPair struct {
 | 
					type topologyPair struct {
 | 
				
			||||||
@@ -300,27 +300,27 @@ type predicateMetadata struct {
 | 
				
			|||||||
	podFitsHostPortsMetadata *podFitsHostPortsMetadata
 | 
						podFitsHostPortsMetadata *podFitsHostPortsMetadata
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Ensure that predicateMetadata implements algorithm.PredicateMetadata.
 | 
					// Ensure that predicateMetadata implements algorithm.Metadata.
 | 
				
			||||||
var _ PredicateMetadata = &predicateMetadata{}
 | 
					var _ Metadata = &predicateMetadata{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// predicateMetadataProducer function produces predicate metadata. It is stored in a global variable below
 | 
					// predicateMetadataProducer function produces predicate metadata. It is stored in a global variable below
 | 
				
			||||||
// and used to modify the return values of PredicateMetadataProducer
 | 
					// and used to modify the return values of MetadataProducer
 | 
				
			||||||
type predicateMetadataProducer func(pm *predicateMetadata)
 | 
					type predicateMetadataProducer func(pm *predicateMetadata)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var predicateMetadataProducers = make(map[string]predicateMetadataProducer)
 | 
					var predicateMetadataProducers = make(map[string]predicateMetadataProducer)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterPredicateMetadataProducer registers a PredicateMetadataProducer.
 | 
					// RegisterPredicateMetadataProducer registers a MetadataProducer.
 | 
				
			||||||
func RegisterPredicateMetadataProducer(predicateName string, precomp predicateMetadataProducer) {
 | 
					func RegisterPredicateMetadataProducer(predicateName string, precomp predicateMetadataProducer) {
 | 
				
			||||||
	predicateMetadataProducers[predicateName] = precomp
 | 
						predicateMetadataProducers[predicateName] = precomp
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EmptyPredicateMetadataProducer returns a no-op MetadataProducer type.
 | 
					// EmptyMetadataProducer returns a no-op MetadataProducer type.
 | 
				
			||||||
func EmptyPredicateMetadataProducer(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) PredicateMetadata {
 | 
					func EmptyMetadataProducer(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) Metadata {
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterPredicateMetadataProducerWithExtendedResourceOptions registers a
 | 
					// RegisterPredicateMetadataProducerWithExtendedResourceOptions registers a
 | 
				
			||||||
// PredicateMetadataProducer that creates predicate metadata with the provided
 | 
					// MetadataProducer that creates predicate metadata with the provided
 | 
				
			||||||
// options for extended resources.
 | 
					// options for extended resources.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
// See the comments in "predicateMetadata" for the explanation of the options.
 | 
					// See the comments in "predicateMetadata" for the explanation of the options.
 | 
				
			||||||
@@ -330,8 +330,11 @@ func RegisterPredicateMetadataProducerWithExtendedResourceOptions(ignoredExtende
 | 
				
			|||||||
	})
 | 
						})
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// MetadataProducerFactory is a factory to produce Metadata.
 | 
				
			||||||
 | 
					type MetadataProducerFactory struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetPredicateMetadata returns the predicateMetadata which will be used by various predicates.
 | 
					// GetPredicateMetadata returns the predicateMetadata which will be used by various predicates.
 | 
				
			||||||
func GetPredicateMetadata(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) PredicateMetadata {
 | 
					func (f *MetadataProducerFactory) GetPredicateMetadata(pod *v1.Pod, sharedLister schedulerlisters.SharedLister) Metadata {
 | 
				
			||||||
	// If we cannot compute metadata, just return nil
 | 
						// If we cannot compute metadata, just return nil
 | 
				
			||||||
	if pod == nil {
 | 
						if pod == nil {
 | 
				
			||||||
		return nil
 | 
							return nil
 | 
				
			||||||
@@ -675,7 +678,7 @@ func (meta *predicateMetadata) AddPod(addedPod *v1.Pod, node *v1.Node) error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// ShallowCopy copies a metadata struct into a new struct and creates a copy of
 | 
					// ShallowCopy copies a metadata struct into a new struct and creates a copy of
 | 
				
			||||||
// its maps and slices, but it does not copy the contents of pointer values.
 | 
					// its maps and slices, but it does not copy the contents of pointer values.
 | 
				
			||||||
func (meta *predicateMetadata) ShallowCopy() PredicateMetadata {
 | 
					func (meta *predicateMetadata) ShallowCopy() Metadata {
 | 
				
			||||||
	newPredMeta := &predicateMetadata{
 | 
						newPredMeta := &predicateMetadata{
 | 
				
			||||||
		pod:           meta.pod,
 | 
							pod:           meta.pod,
 | 
				
			||||||
		podBestEffort: meta.podBestEffort,
 | 
							podBestEffort: meta.podBestEffort,
 | 
				
			||||||
@@ -685,7 +688,7 @@ func (meta *predicateMetadata) ShallowCopy() PredicateMetadata {
 | 
				
			|||||||
	newPredMeta.evenPodsSpreadMetadata = meta.evenPodsSpreadMetadata.clone()
 | 
						newPredMeta.evenPodsSpreadMetadata = meta.evenPodsSpreadMetadata.clone()
 | 
				
			||||||
	newPredMeta.serviceAffinityMetadata = meta.serviceAffinityMetadata.clone()
 | 
						newPredMeta.serviceAffinityMetadata = meta.serviceAffinityMetadata.clone()
 | 
				
			||||||
	newPredMeta.podFitsResourcesMetadata = meta.podFitsResourcesMetadata.clone()
 | 
						newPredMeta.podFitsResourcesMetadata = meta.podFitsResourcesMetadata.clone()
 | 
				
			||||||
	return (PredicateMetadata)(newPredMeta)
 | 
						return (Metadata)(newPredMeta)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type affinityTermProperties struct {
 | 
					type affinityTermProperties struct {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -358,7 +358,8 @@ func TestPredicateMetadata_AddRemovePod(t *testing.T) {
 | 
				
			|||||||
				s := nodeinfosnapshot.NewSnapshot(pods, test.nodes)
 | 
									s := nodeinfosnapshot.NewSnapshot(pods, test.nodes)
 | 
				
			||||||
				_, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), nil)
 | 
									_, precompute := NewServiceAffinityPredicate(s.NodeInfos(), s.Pods(), fakelisters.ServiceLister(test.services), nil)
 | 
				
			||||||
				RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
 | 
									RegisterPredicateMetadataProducer("ServiceAffinityMetaProducer", precompute)
 | 
				
			||||||
				meta := GetPredicateMetadata(test.pendingPod, s)
 | 
									factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
									meta := factory.GetPredicateMetadata(test.pendingPod, s)
 | 
				
			||||||
				return meta.(*predicateMetadata), s.NodeInfoMap
 | 
									return meta.(*predicateMetadata), s.NodeInfoMap
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -151,7 +151,7 @@ func Ordering() []string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// FitPredicate is a function that indicates if a pod fits into an existing node.
 | 
					// FitPredicate is a function that indicates if a pod fits into an existing node.
 | 
				
			||||||
// The failure information is given by the error.
 | 
					// The failure information is given by the error.
 | 
				
			||||||
type FitPredicate func(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error)
 | 
					type FitPredicate func(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func isVolumeConflict(volume v1.Volume, pod *v1.Pod) bool {
 | 
					func isVolumeConflict(volume v1.Volume, pod *v1.Pod) bool {
 | 
				
			||||||
	// fast path if there is no conflict checking targets.
 | 
						// fast path if there is no conflict checking targets.
 | 
				
			||||||
@@ -209,7 +209,7 @@ func isVolumeConflict(volume v1.Volume, pod *v1.Pod) bool {
 | 
				
			|||||||
// - Ceph RBD forbids if any two pods share at least same monitor, and match pool and image, and the image is read-only
 | 
					// - Ceph RBD forbids if any two pods share at least same monitor, and match pool and image, and the image is read-only
 | 
				
			||||||
// - ISCSI forbids if any two pods share at least same IQN and ISCSI volume is read-only
 | 
					// - ISCSI forbids if any two pods share at least same IQN and ISCSI volume is read-only
 | 
				
			||||||
// TODO: migrate this into some per-volume specific code?
 | 
					// TODO: migrate this into some per-volume specific code?
 | 
				
			||||||
func NoDiskConflict(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func NoDiskConflict(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	for _, v := range pod.Spec.Volumes {
 | 
						for _, v := range pod.Spec.Volumes {
 | 
				
			||||||
		for _, ev := range nodeInfo.Pods() {
 | 
							for _, ev := range nodeInfo.Pods() {
 | 
				
			||||||
			if isVolumeConflict(v, ev) {
 | 
								if isVolumeConflict(v, ev) {
 | 
				
			||||||
@@ -418,7 +418,7 @@ func (c *MaxPDVolumeCountChecker) matchProvisioner(pvc *v1.PersistentVolumeClaim
 | 
				
			|||||||
	return c.filter.MatchProvisioner(storageClass)
 | 
						return c.filter.MatchProvisioner(storageClass)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *MaxPDVolumeCountChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func (c *MaxPDVolumeCountChecker) predicate(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	// If a pod doesn't have any volume attached to it, the predicate will always be true.
 | 
						// If a pod doesn't have any volume attached to it, the predicate will always be true.
 | 
				
			||||||
	// Thus we make a fast path for it, to avoid unnecessary computations in this case.
 | 
						// Thus we make a fast path for it, to avoid unnecessary computations in this case.
 | 
				
			||||||
	if len(pod.Spec.Volumes) == 0 {
 | 
						if len(pod.Spec.Volumes) == 0 {
 | 
				
			||||||
@@ -640,7 +640,7 @@ func NewVolumeZonePredicate(pvLister corelisters.PersistentVolumeLister, pvcList
 | 
				
			|||||||
	return c.predicate
 | 
						return c.predicate
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	// If a pod doesn't have any volume attached to it, the predicate will always be true.
 | 
						// If a pod doesn't have any volume attached to it, the predicate will always be true.
 | 
				
			||||||
	// Thus we make a fast path for it, to avoid unnecessary computations in this case.
 | 
						// Thus we make a fast path for it, to avoid unnecessary computations in this case.
 | 
				
			||||||
	if len(pod.Spec.Volumes) == 0 {
 | 
						if len(pod.Spec.Volumes) == 0 {
 | 
				
			||||||
@@ -787,7 +787,7 @@ func podName(pod *v1.Pod) string {
 | 
				
			|||||||
// PodFitsResources checks if a node has sufficient resources, such as cpu, memory, gpu, opaque int resources etc to run a pod.
 | 
					// PodFitsResources checks if a node has sufficient resources, such as cpu, memory, gpu, opaque int resources etc to run a pod.
 | 
				
			||||||
// First return value indicates whether a node has sufficient resources to run a pod while the second return value indicates the
 | 
					// First return value indicates whether a node has sufficient resources to run a pod while the second return value indicates the
 | 
				
			||||||
// predicate failure reasons if the node has insufficient resources to run the pod.
 | 
					// predicate failure reasons if the node has insufficient resources to run the pod.
 | 
				
			||||||
func PodFitsResources(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func PodFitsResources(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return false, nil, fmt.Errorf("node not found")
 | 
							return false, nil, fmt.Errorf("node not found")
 | 
				
			||||||
@@ -912,7 +912,7 @@ func PodMatchesNodeSelectorAndAffinityTerms(pod *v1.Pod, node *v1.Node) bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PodMatchNodeSelector checks if a pod node selector matches the node label.
 | 
					// PodMatchNodeSelector checks if a pod node selector matches the node label.
 | 
				
			||||||
func PodMatchNodeSelector(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func PodMatchNodeSelector(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return false, nil, fmt.Errorf("node not found")
 | 
							return false, nil, fmt.Errorf("node not found")
 | 
				
			||||||
@@ -924,7 +924,7 @@ func PodMatchNodeSelector(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedul
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PodFitsHost checks if a pod spec node name matches the current node.
 | 
					// PodFitsHost checks if a pod spec node name matches the current node.
 | 
				
			||||||
func PodFitsHost(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func PodFitsHost(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	if len(pod.Spec.NodeName) == 0 {
 | 
						if len(pod.Spec.NodeName) == 0 {
 | 
				
			||||||
		return true, nil, nil
 | 
							return true, nil, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -968,7 +968,7 @@ func NewNodeLabelPredicate(presentLabels []string, absentLabels []string) FitPre
 | 
				
			|||||||
// Alternately, eliminating nodes that have a certain label, regardless of value, is also useful
 | 
					// Alternately, eliminating nodes that have a certain label, regardless of value, is also useful
 | 
				
			||||||
// A node may have a label with "retiring" as key and the date as the value
 | 
					// A node may have a label with "retiring" as key and the date as the value
 | 
				
			||||||
// and it may be desirable to avoid scheduling new pods on this node.
 | 
					// and it may be desirable to avoid scheduling new pods on this node.
 | 
				
			||||||
func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func (n *NodeLabelChecker) CheckNodeLabelPresence(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return false, nil, fmt.Errorf("node not found")
 | 
							return false, nil, fmt.Errorf("node not found")
 | 
				
			||||||
@@ -1063,7 +1063,7 @@ func NewServiceAffinityPredicate(nodeInfoLister schedulerlisters.NodeInfoLister,
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
// WARNING: This Predicate is NOT guaranteed to work if some of the predicateMetadata data isn't precomputed...
 | 
					// WARNING: This Predicate is NOT guaranteed to work if some of the predicateMetadata data isn't precomputed...
 | 
				
			||||||
// For that reason it is not exported, i.e. it is highly coupled to the implementation of the FitPredicate construction.
 | 
					// For that reason it is not exported, i.e. it is highly coupled to the implementation of the FitPredicate construction.
 | 
				
			||||||
func (s *ServiceAffinity) checkServiceAffinity(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func (s *ServiceAffinity) checkServiceAffinity(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	var services []*v1.Service
 | 
						var services []*v1.Service
 | 
				
			||||||
	var pods []*v1.Pod
 | 
						var pods []*v1.Pod
 | 
				
			||||||
	if pm, ok := meta.(*predicateMetadata); ok && pm.serviceAffinityMetadata != nil && (pm.serviceAffinityMetadata.matchingPodList != nil || pm.serviceAffinityMetadata.matchingPodServices != nil) {
 | 
						if pm, ok := meta.(*predicateMetadata); ok && pm.serviceAffinityMetadata != nil && (pm.serviceAffinityMetadata.matchingPodList != nil || pm.serviceAffinityMetadata.matchingPodServices != nil) {
 | 
				
			||||||
@@ -1102,7 +1102,7 @@ func (s *ServiceAffinity) checkServiceAffinity(pod *v1.Pod, meta PredicateMetada
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PodFitsHostPorts checks if a node has free ports for the requested pod ports.
 | 
					// PodFitsHostPorts checks if a node has free ports for the requested pod ports.
 | 
				
			||||||
func PodFitsHostPorts(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func PodFitsHostPorts(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	var wantPorts []*v1.ContainerPort
 | 
						var wantPorts []*v1.ContainerPort
 | 
				
			||||||
	if predicateMeta, ok := meta.(*predicateMetadata); ok && predicateMeta.podFitsHostPortsMetadata != nil {
 | 
						if predicateMeta, ok := meta.(*predicateMetadata); ok && predicateMeta.podFitsHostPortsMetadata != nil {
 | 
				
			||||||
		wantPorts = predicateMeta.podFitsHostPortsMetadata.podPorts
 | 
							wantPorts = predicateMeta.podFitsHostPortsMetadata.podPorts
 | 
				
			||||||
@@ -1145,7 +1145,7 @@ func haveOverlap(a1, a2 []string) bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GeneralPredicates checks whether noncriticalPredicates and EssentialPredicates pass. noncriticalPredicates are the predicates
 | 
					// GeneralPredicates checks whether noncriticalPredicates and EssentialPredicates pass. noncriticalPredicates are the predicates
 | 
				
			||||||
// that only non-critical pods need and EssentialPredicates are the predicates that all pods, including critical pods, need.
 | 
					// that only non-critical pods need and EssentialPredicates are the predicates that all pods, including critical pods, need.
 | 
				
			||||||
func GeneralPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func GeneralPredicates(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	var predicateFails []PredicateFailureReason
 | 
						var predicateFails []PredicateFailureReason
 | 
				
			||||||
	for _, predicate := range []FitPredicate{noncriticalPredicates, EssentialPredicates} {
 | 
						for _, predicate := range []FitPredicate{noncriticalPredicates, EssentialPredicates} {
 | 
				
			||||||
		fit, reasons, err := predicate(pod, meta, nodeInfo)
 | 
							fit, reasons, err := predicate(pod, meta, nodeInfo)
 | 
				
			||||||
@@ -1161,7 +1161,7 @@ func GeneralPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulern
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// noncriticalPredicates are the predicates that only non-critical pods need.
 | 
					// noncriticalPredicates are the predicates that only non-critical pods need.
 | 
				
			||||||
func noncriticalPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func noncriticalPredicates(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	var predicateFails []PredicateFailureReason
 | 
						var predicateFails []PredicateFailureReason
 | 
				
			||||||
	fit, reasons, err := PodFitsResources(pod, meta, nodeInfo)
 | 
						fit, reasons, err := PodFitsResources(pod, meta, nodeInfo)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
@@ -1175,7 +1175,7 @@ func noncriticalPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedu
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EssentialPredicates are the predicates that all pods, including critical pods, need.
 | 
					// EssentialPredicates are the predicates that all pods, including critical pods, need.
 | 
				
			||||||
func EssentialPredicates(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func EssentialPredicates(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	var predicateFails []PredicateFailureReason
 | 
						var predicateFails []PredicateFailureReason
 | 
				
			||||||
	// TODO: PodFitsHostPorts is essential for now, but kubelet should ideally
 | 
						// TODO: PodFitsHostPorts is essential for now, but kubelet should ideally
 | 
				
			||||||
	//       preempt pods to free up host ports too
 | 
						//       preempt pods to free up host ports too
 | 
				
			||||||
@@ -1210,7 +1210,7 @@ func NewPodAffinityPredicate(nodeInfoLister schedulerlisters.NodeInfoLister, pod
 | 
				
			|||||||
// InterPodAffinityMatches checks if a pod can be scheduled on the specified node with pod affinity/anti-affinity configuration.
 | 
					// InterPodAffinityMatches checks if a pod can be scheduled on the specified node with pod affinity/anti-affinity configuration.
 | 
				
			||||||
// First return value indicates whether a pod can be scheduled on the specified node while the second return value indicates the
 | 
					// First return value indicates whether a pod can be scheduled on the specified node while the second return value indicates the
 | 
				
			||||||
// predicate failure reasons if the pod cannot be scheduled on the specified node.
 | 
					// predicate failure reasons if the pod cannot be scheduled on the specified node.
 | 
				
			||||||
func (c *PodAffinityChecker) InterPodAffinityMatches(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func (c *PodAffinityChecker) InterPodAffinityMatches(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return false, nil, fmt.Errorf("node not found")
 | 
							return false, nil, fmt.Errorf("node not found")
 | 
				
			||||||
@@ -1345,7 +1345,7 @@ func (c *PodAffinityChecker) getMatchingAntiAffinityTopologyPairsOfPods(pod *v1.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Checks if scheduling the pod onto this node would break any anti-affinity
 | 
					// Checks if scheduling the pod onto this node would break any anti-affinity
 | 
				
			||||||
// terms indicated by the existing pods.
 | 
					// terms indicated by the existing pods.
 | 
				
			||||||
func (c *PodAffinityChecker) satisfiesExistingPodsAntiAffinity(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (PredicateFailureReason, error) {
 | 
					func (c *PodAffinityChecker) satisfiesExistingPodsAntiAffinity(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return ErrExistingPodsAntiAffinityRulesNotMatch, fmt.Errorf("node not found")
 | 
							return ErrExistingPodsAntiAffinityRulesNotMatch, fmt.Errorf("node not found")
 | 
				
			||||||
@@ -1420,7 +1420,7 @@ func (c *PodAffinityChecker) nodeMatchesAnyTopologyTerm(pod *v1.Pod, topologyPai
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// satisfiesPodsAffinityAntiAffinity checks if scheduling the pod onto this node would break any term of this pod.
 | 
					// satisfiesPodsAffinityAntiAffinity checks if scheduling the pod onto this node would break any term of this pod.
 | 
				
			||||||
func (c *PodAffinityChecker) satisfiesPodsAffinityAntiAffinity(pod *v1.Pod,
 | 
					func (c *PodAffinityChecker) satisfiesPodsAffinityAntiAffinity(pod *v1.Pod,
 | 
				
			||||||
	meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo,
 | 
						meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo,
 | 
				
			||||||
	affinity *v1.Affinity) (PredicateFailureReason, error) {
 | 
						affinity *v1.Affinity) (PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
@@ -1521,7 +1521,7 @@ func (c *PodAffinityChecker) satisfiesPodsAffinityAntiAffinity(pod *v1.Pod,
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// CheckNodeUnschedulablePredicate checks if a pod can be scheduled on a node with Unschedulable spec.
 | 
					// CheckNodeUnschedulablePredicate checks if a pod can be scheduled on a node with Unschedulable spec.
 | 
				
			||||||
func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	if nodeInfo == nil || nodeInfo.Node() == nil {
 | 
						if nodeInfo == nil || nodeInfo.Node() == nil {
 | 
				
			||||||
		return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil
 | 
							return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1541,7 +1541,7 @@ func CheckNodeUnschedulablePredicate(pod *v1.Pod, meta PredicateMetadata, nodeIn
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PodToleratesNodeTaints checks if a pod tolerations can tolerate the node taints.
 | 
					// PodToleratesNodeTaints checks if a pod tolerations can tolerate the node taints.
 | 
				
			||||||
func PodToleratesNodeTaints(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func PodToleratesNodeTaints(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	if nodeInfo == nil || nodeInfo.Node() == nil {
 | 
						if nodeInfo == nil || nodeInfo.Node() == nil {
 | 
				
			||||||
		return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil
 | 
							return false, []PredicateFailureReason{ErrNodeUnknownCondition}, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -1553,7 +1553,7 @@ func PodToleratesNodeTaints(pod *v1.Pod, meta PredicateMetadata, nodeInfo *sched
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PodToleratesNodeNoExecuteTaints checks if a pod tolerations can tolerate the node's NoExecute taints.
 | 
					// PodToleratesNodeNoExecuteTaints checks if a pod tolerations can tolerate the node's NoExecute taints.
 | 
				
			||||||
func PodToleratesNodeNoExecuteTaints(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func PodToleratesNodeNoExecuteTaints(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	return podToleratesNodeTaints(pod, nodeInfo, func(t *v1.Taint) bool {
 | 
						return podToleratesNodeTaints(pod, nodeInfo, func(t *v1.Taint) bool {
 | 
				
			||||||
		return t.Effect == v1.TaintEffectNoExecute
 | 
							return t.Effect == v1.TaintEffectNoExecute
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -1603,7 +1603,7 @@ func podHasPVCs(pod *v1.Pod) bool {
 | 
				
			|||||||
	return false
 | 
						return false
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *VolumeBindingChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func (c *VolumeBindingChecker) predicate(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	// If pod does not request any PVC, we don't need to do anything.
 | 
						// If pod does not request any PVC, we don't need to do anything.
 | 
				
			||||||
	if !podHasPVCs(pod) {
 | 
						if !podHasPVCs(pod) {
 | 
				
			||||||
		return true, nil, nil
 | 
							return true, nil, nil
 | 
				
			||||||
@@ -1641,7 +1641,7 @@ func (c *VolumeBindingChecker) predicate(pod *v1.Pod, meta PredicateMetadata, no
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// EvenPodsSpreadPredicate checks if a pod can be scheduled on a node which satisfies
 | 
					// EvenPodsSpreadPredicate checks if a pod can be scheduled on a node which satisfies
 | 
				
			||||||
// its topologySpreadConstraints.
 | 
					// its topologySpreadConstraints.
 | 
				
			||||||
func EvenPodsSpreadPredicate(pod *v1.Pod, meta PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
					func EvenPodsSpreadPredicate(pod *v1.Pod, meta Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return false, nil, fmt.Errorf("node not found")
 | 
							return false, nil, fmt.Errorf("node not found")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -390,7 +390,8 @@ func TestPodFitsResources(t *testing.T) {
 | 
				
			|||||||
			node := v1.Node{Status: v1.NodeStatus{Capacity: makeResources(10, 20, 32, 5, 20, 5).Capacity, Allocatable: makeAllocatableResources(10, 20, 32, 5, 20, 5)}}
 | 
								node := v1.Node{Status: v1.NodeStatus{Capacity: makeResources(10, 20, 32, 5, 20, 5).Capacity, Allocatable: makeAllocatableResources(10, 20, 32, 5, 20, 5)}}
 | 
				
			||||||
			test.nodeInfo.SetNode(&node)
 | 
								test.nodeInfo.SetNode(&node)
 | 
				
			||||||
			RegisterPredicateMetadataProducerWithExtendedResourceOptions(test.ignoredExtendedResources)
 | 
								RegisterPredicateMetadataProducerWithExtendedResourceOptions(test.ignoredExtendedResources)
 | 
				
			||||||
			meta := GetPredicateMetadata(test.pod, nil)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(test.pod, nil)
 | 
				
			||||||
			fits, reasons, err := PodFitsResources(test.pod, meta, test.nodeInfo)
 | 
								fits, reasons, err := PodFitsResources(test.pod, meta, test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -448,7 +449,8 @@ func TestPodFitsResources(t *testing.T) {
 | 
				
			|||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			node := v1.Node{Status: v1.NodeStatus{Capacity: v1.ResourceList{}, Allocatable: makeAllocatableResources(10, 20, 1, 0, 0, 0)}}
 | 
								node := v1.Node{Status: v1.NodeStatus{Capacity: v1.ResourceList{}, Allocatable: makeAllocatableResources(10, 20, 1, 0, 0, 0)}}
 | 
				
			||||||
			test.nodeInfo.SetNode(&node)
 | 
								test.nodeInfo.SetNode(&node)
 | 
				
			||||||
			fits, reasons, err := PodFitsResources(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := PodFitsResources(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -508,7 +510,8 @@ func TestPodFitsResources(t *testing.T) {
 | 
				
			|||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			node := v1.Node{Status: v1.NodeStatus{Capacity: makeResources(10, 20, 32, 5, 20, 5).Capacity, Allocatable: makeAllocatableResources(10, 20, 32, 5, 20, 5)}}
 | 
								node := v1.Node{Status: v1.NodeStatus{Capacity: makeResources(10, 20, 32, 5, 20, 5).Capacity, Allocatable: makeAllocatableResources(10, 20, 32, 5, 20, 5)}}
 | 
				
			||||||
			test.nodeInfo.SetNode(&node)
 | 
								test.nodeInfo.SetNode(&node)
 | 
				
			||||||
			fits, reasons, err := PodFitsResources(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := PodFitsResources(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -571,7 +574,8 @@ func TestPodFitsHost(t *testing.T) {
 | 
				
			|||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			nodeInfo := schedulernodeinfo.NewNodeInfo()
 | 
								nodeInfo := schedulernodeinfo.NewNodeInfo()
 | 
				
			||||||
			nodeInfo.SetNode(test.node)
 | 
								nodeInfo.SetNode(test.node)
 | 
				
			||||||
			fits, reasons, err := PodFitsHost(test.pod, GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := PodFitsHost(test.pod, factory.GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -711,7 +715,8 @@ func TestPodFitsHostPorts(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			fits, reasons, err := PodFitsHostPorts(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := PodFitsHostPorts(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -763,7 +768,8 @@ func TestGCEDiskConflicts(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			ok, reasons, err := NoDiskConflict(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								ok, reasons, err := NoDiskConflict(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -818,7 +824,8 @@ func TestAWSDiskConflicts(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			ok, reasons, err := NoDiskConflict(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								ok, reasons, err := NoDiskConflict(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -879,7 +886,8 @@ func TestRBDDiskConflicts(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			ok, reasons, err := NoDiskConflict(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								ok, reasons, err := NoDiskConflict(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -940,7 +948,8 @@ func TestISCSIDiskConflicts(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			ok, reasons, err := NoDiskConflict(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								ok, reasons, err := NoDiskConflict(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -1641,7 +1650,8 @@ func TestPodFitsSelector(t *testing.T) {
 | 
				
			|||||||
			nodeInfo := schedulernodeinfo.NewNodeInfo()
 | 
								nodeInfo := schedulernodeinfo.NewNodeInfo()
 | 
				
			||||||
			nodeInfo.SetNode(&node)
 | 
								nodeInfo.SetNode(&node)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			fits, reasons, err := PodMatchNodeSelector(test.pod, GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := PodMatchNodeSelector(test.pod, factory.GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -1704,7 +1714,8 @@ func TestNodeLabelPresence(t *testing.T) {
 | 
				
			|||||||
			nodeInfo.SetNode(&node)
 | 
								nodeInfo.SetNode(&node)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			labelChecker := NodeLabelChecker{test.presentLabels, test.absentLabels}
 | 
								labelChecker := NodeLabelChecker{test.presentLabels, test.absentLabels}
 | 
				
			||||||
			fits, reasons, err := labelChecker.CheckNodeLabelPresence(test.pod, GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := labelChecker.CheckNodeLabelPresence(test.pod, factory.GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -1859,7 +1870,8 @@ func TestServiceAffinity(t *testing.T) {
 | 
				
			|||||||
						precompute(pm)
 | 
											precompute(pm)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				})
 | 
									})
 | 
				
			||||||
				if pmeta, ok := (GetPredicateMetadata(test.pod, s)).(*predicateMetadata); ok {
 | 
									factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
									if pmeta, ok := (factory.GetPredicateMetadata(test.pod, s)).(*predicateMetadata); ok {
 | 
				
			||||||
					fits, reasons, err := predicate(test.pod, pmeta, s.NodeInfoMap[test.node.Name])
 | 
										fits, reasons, err := predicate(test.pod, pmeta, s.NodeInfoMap[test.node.Name])
 | 
				
			||||||
					if err != nil {
 | 
										if err != nil {
 | 
				
			||||||
						t.Errorf("unexpected error: %v", err)
 | 
											t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
@@ -1967,7 +1979,8 @@ func TestRunGeneralPredicates(t *testing.T) {
 | 
				
			|||||||
	for _, test := range resourceTests {
 | 
						for _, test := range resourceTests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			test.nodeInfo.SetNode(test.node)
 | 
								test.nodeInfo.SetNode(test.node)
 | 
				
			||||||
			fits, reasons, err := GeneralPredicates(test.pod, GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := GeneralPredicates(test.pod, factory.GetPredicateMetadata(test.pod, nil), test.nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -2922,7 +2935,8 @@ func TestInterPodAffinity(t *testing.T) {
 | 
				
			|||||||
				nodeInfoLister: s.NodeInfos(),
 | 
									nodeInfoLister: s.NodeInfos(),
 | 
				
			||||||
				podLister:      fakelisters.PodLister(test.pods),
 | 
									podLister:      fakelisters.PodLister(test.pods),
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			fits, reasons, _ := fit.InterPodAffinityMatches(test.pod, GetPredicateMetadata(test.pod, s), s.NodeInfoMap[test.node.Name])
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, _ := fit.InterPodAffinityMatches(test.pod, factory.GetPredicateMetadata(test.pod, s), s.NodeInfoMap[test.node.Name])
 | 
				
			||||||
			if !fits && !reflect.DeepEqual(reasons, test.expectFailureReasons) {
 | 
								if !fits && !reflect.DeepEqual(reasons, test.expectFailureReasons) {
 | 
				
			||||||
				t.Errorf("unexpected failure reasons: %v, want: %v", reasons, test.expectFailureReasons)
 | 
									t.Errorf("unexpected failure reasons: %v, want: %v", reasons, test.expectFailureReasons)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -4018,9 +4032,10 @@ func TestInterPodAffinityWithMultipleNodes(t *testing.T) {
 | 
				
			|||||||
					podLister:      snapshot.Pods(),
 | 
										podLister:      snapshot.Pods(),
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				var meta PredicateMetadata
 | 
									var meta Metadata
 | 
				
			||||||
				if !test.nometa {
 | 
									if !test.nometa {
 | 
				
			||||||
					meta = GetPredicateMetadata(test.pod, snapshot)
 | 
										factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
										meta = factory.GetPredicateMetadata(test.pod, snapshot)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				fits, reasons, _ := testFit.InterPodAffinityMatches(test.pod, meta, snapshot.NodeInfoMap[node.Name])
 | 
									fits, reasons, _ := testFit.InterPodAffinityMatches(test.pod, meta, snapshot.NodeInfoMap[node.Name])
 | 
				
			||||||
@@ -4030,7 +4045,8 @@ func TestInterPodAffinityWithMultipleNodes(t *testing.T) {
 | 
				
			|||||||
				affinity := test.pod.Spec.Affinity
 | 
									affinity := test.pod.Spec.Affinity
 | 
				
			||||||
				if affinity != nil && affinity.NodeAffinity != nil {
 | 
									if affinity != nil && affinity.NodeAffinity != nil {
 | 
				
			||||||
					s := nodeinfosnapshot.NewSnapshot(nil, []*v1.Node{node})
 | 
										s := nodeinfosnapshot.NewSnapshot(nil, []*v1.Node{node})
 | 
				
			||||||
					fits2, reasons, err := PodMatchNodeSelector(test.pod, GetPredicateMetadata(test.pod, s), s.NodeInfoMap[node.Name])
 | 
										factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
										fits2, reasons, err := PodMatchNodeSelector(test.pod, factory.GetPredicateMetadata(test.pod, s), s.NodeInfoMap[node.Name])
 | 
				
			||||||
					if err != nil {
 | 
										if err != nil {
 | 
				
			||||||
						t.Errorf("unexpected error: %v", err)
 | 
											t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@@ -4238,7 +4254,8 @@ func TestPodToleratesTaints(t *testing.T) {
 | 
				
			|||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			nodeInfo := schedulernodeinfo.NewNodeInfo()
 | 
								nodeInfo := schedulernodeinfo.NewNodeInfo()
 | 
				
			||||||
			nodeInfo.SetNode(&test.node)
 | 
								nodeInfo.SetNode(&test.node)
 | 
				
			||||||
			fits, reasons, err := PodToleratesNodeTaints(test.pod, GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								fits, reasons, err := PodToleratesNodeTaints(test.pod, factory.GetPredicateMetadata(test.pod, nil), nodeInfo)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				t.Errorf("unexpected error: %v", err)
 | 
									t.Errorf("unexpected error: %v", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
@@ -4951,7 +4968,8 @@ func TestEvenPodsSpreadPredicate_SingleConstraint(t *testing.T) {
 | 
				
			|||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
								s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
				
			||||||
			meta := GetPredicateMetadata(tt.pod, s)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(tt.pod, s)
 | 
				
			||||||
			for _, node := range tt.nodes {
 | 
								for _, node := range tt.nodes {
 | 
				
			||||||
				fits, _, _ := EvenPodsSpreadPredicate(tt.pod, meta, s.NodeInfoMap[node.Name])
 | 
									fits, _, _ := EvenPodsSpreadPredicate(tt.pod, meta, s.NodeInfoMap[node.Name])
 | 
				
			||||||
				if fits != tt.fits[node.Name] {
 | 
									if fits != tt.fits[node.Name] {
 | 
				
			||||||
@@ -5144,7 +5162,8 @@ func TestEvenPodsSpreadPredicate_MultipleConstraints(t *testing.T) {
 | 
				
			|||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
								s := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
				
			||||||
			meta := GetPredicateMetadata(tt.pod, s)
 | 
								factory := &MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(tt.pod, s)
 | 
				
			||||||
			for _, node := range tt.nodes {
 | 
								for _, node := range tt.nodes {
 | 
				
			||||||
				fits, _, _ := EvenPodsSpreadPredicate(tt.pod, meta, s.NodeInfoMap[node.Name])
 | 
									fits, _, _ := EvenPodsSpreadPredicate(tt.pod, meta, s.NodeInfoMap[node.Name])
 | 
				
			||||||
				if fits != tt.fits[node.Name] {
 | 
									if fits != tt.fits[node.Name] {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,8 +26,8 @@ import (
 | 
				
			|||||||
	schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
 | 
						schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PriorityMetadataFactory is a factory to produce PriorityMetadata.
 | 
					// MetadataFactory is a factory to produce PriorityMetadata.
 | 
				
			||||||
type PriorityMetadataFactory struct {
 | 
					type MetadataFactory struct {
 | 
				
			||||||
	serviceLister         corelisters.ServiceLister
 | 
						serviceLister         corelisters.ServiceLister
 | 
				
			||||||
	controllerLister      corelisters.ReplicationControllerLister
 | 
						controllerLister      corelisters.ReplicationControllerLister
 | 
				
			||||||
	replicaSetLister      appslisters.ReplicaSetLister
 | 
						replicaSetLister      appslisters.ReplicaSetLister
 | 
				
			||||||
@@ -35,15 +35,15 @@ type PriorityMetadataFactory struct {
 | 
				
			|||||||
	hardPodAffinityWeight int32
 | 
						hardPodAffinityWeight int32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NewPriorityMetadataFactory creates a PriorityMetadataFactory.
 | 
					// NewMetadataFactory creates a MetadataFactory.
 | 
				
			||||||
func NewPriorityMetadataFactory(
 | 
					func NewMetadataFactory(
 | 
				
			||||||
	serviceLister corelisters.ServiceLister,
 | 
						serviceLister corelisters.ServiceLister,
 | 
				
			||||||
	controllerLister corelisters.ReplicationControllerLister,
 | 
						controllerLister corelisters.ReplicationControllerLister,
 | 
				
			||||||
	replicaSetLister appslisters.ReplicaSetLister,
 | 
						replicaSetLister appslisters.ReplicaSetLister,
 | 
				
			||||||
	statefulSetLister appslisters.StatefulSetLister,
 | 
						statefulSetLister appslisters.StatefulSetLister,
 | 
				
			||||||
	hardPodAffinityWeight int32,
 | 
						hardPodAffinityWeight int32,
 | 
				
			||||||
) PriorityMetadataProducer {
 | 
					) MetadataProducer {
 | 
				
			||||||
	factory := &PriorityMetadataFactory{
 | 
						factory := &MetadataFactory{
 | 
				
			||||||
		serviceLister:         serviceLister,
 | 
							serviceLister:         serviceLister,
 | 
				
			||||||
		controllerLister:      controllerLister,
 | 
							controllerLister:      controllerLister,
 | 
				
			||||||
		replicaSetLister:      replicaSetLister,
 | 
							replicaSetLister:      replicaSetLister,
 | 
				
			||||||
@@ -66,8 +66,8 @@ type priorityMetadata struct {
 | 
				
			|||||||
	topologyScore           topologyPairToScore
 | 
						topologyScore           topologyPairToScore
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PriorityMetadata is a PriorityMetadataProducer.  Node info can be nil.
 | 
					// PriorityMetadata is a MetadataProducer.  Node info can be nil.
 | 
				
			||||||
func (pmf *PriorityMetadataFactory) PriorityMetadata(
 | 
					func (pmf *MetadataFactory) PriorityMetadata(
 | 
				
			||||||
	pod *v1.Pod,
 | 
						pod *v1.Pod,
 | 
				
			||||||
	filteredNodes []*v1.Node,
 | 
						filteredNodes []*v1.Node,
 | 
				
			||||||
	sharedLister schedulerlisters.SharedLister,
 | 
						sharedLister schedulerlisters.SharedLister,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -165,7 +165,7 @@ func TestPriorityMetadata(t *testing.T) {
 | 
				
			|||||||
	client := clientsetfake.NewSimpleClientset()
 | 
						client := clientsetfake.NewSimpleClientset()
 | 
				
			||||||
	informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
						informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	metaDataProducer := NewPriorityMetadataFactory(
 | 
						metaDataProducer := NewMetadataFactory(
 | 
				
			||||||
		informerFactory.Core().V1().Services().Lister(),
 | 
							informerFactory.Core().V1().Services().Lister(),
 | 
				
			||||||
		informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
							informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
				
			||||||
		informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
							informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -346,7 +346,7 @@ func TestSelectorSpreadPriority(t *testing.T) {
 | 
				
			|||||||
				statefulSetLister: fakelisters.StatefulSetLister(test.sss),
 | 
									statefulSetLister: fakelisters.StatefulSetLister(test.sss),
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := NewPriorityMetadataFactory(
 | 
								metaDataProducer := NewMetadataFactory(
 | 
				
			||||||
				fakelisters.ServiceLister(test.services),
 | 
									fakelisters.ServiceLister(test.services),
 | 
				
			||||||
				fakelisters.ControllerLister(test.rcs),
 | 
									fakelisters.ControllerLister(test.rcs),
 | 
				
			||||||
				fakelisters.ReplicaSetLister(test.rss),
 | 
									fakelisters.ReplicaSetLister(test.rss),
 | 
				
			||||||
@@ -584,7 +584,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
 | 
				
			|||||||
				statefulSetLister: fakelisters.StatefulSetLister(test.sss),
 | 
									statefulSetLister: fakelisters.StatefulSetLister(test.sss),
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := NewPriorityMetadataFactory(
 | 
								metaDataProducer := NewMetadataFactory(
 | 
				
			||||||
				fakelisters.ServiceLister(test.services),
 | 
									fakelisters.ServiceLister(test.services),
 | 
				
			||||||
				fakelisters.ControllerLister(test.rcs),
 | 
									fakelisters.ControllerLister(test.rcs),
 | 
				
			||||||
				fakelisters.ReplicaSetLister(test.rss),
 | 
									fakelisters.ReplicaSetLister(test.rss),
 | 
				
			||||||
@@ -773,7 +773,7 @@ func TestZoneSpreadPriority(t *testing.T) {
 | 
				
			|||||||
			snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
 | 
				
			||||||
			zoneSpread := ServiceAntiAffinity{podLister: snapshot.Pods(), serviceLister: fakelisters.ServiceLister(test.services), labels: []string{"zone"}}
 | 
								zoneSpread := ServiceAntiAffinity{podLister: snapshot.Pods(), serviceLister: fakelisters.ServiceLister(test.services), labels: []string{"zone"}}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := NewPriorityMetadataFactory(
 | 
								metaDataProducer := NewMetadataFactory(
 | 
				
			||||||
				fakelisters.ServiceLister(test.services),
 | 
									fakelisters.ServiceLister(test.services),
 | 
				
			||||||
				fakelisters.ControllerLister(rcs),
 | 
									fakelisters.ControllerLister(rcs),
 | 
				
			||||||
				fakelisters.ReplicaSetLister(rss),
 | 
									fakelisters.ReplicaSetLister(rss),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,9 +34,9 @@ type PriorityMapFunction func(pod *v1.Pod, meta interface{}, nodeInfo *scheduler
 | 
				
			|||||||
// TODO: Change interface{} to a specific type.
 | 
					// TODO: Change interface{} to a specific type.
 | 
				
			||||||
type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, sharedLister schedulerlisters.SharedLister, result framework.NodeScoreList) error
 | 
					type PriorityReduceFunction func(pod *v1.Pod, meta interface{}, sharedLister schedulerlisters.SharedLister, result framework.NodeScoreList) error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PriorityMetadataProducer is a function that computes metadata for a given pod. This
 | 
					// MetadataProducer is a function that computes metadata for a given pod. This
 | 
				
			||||||
// is now used for only for priority functions. For predicates please use PredicateMetadataProducer.
 | 
					// is now used for only for priority functions. For predicates please use PredicateMetadataProducer.
 | 
				
			||||||
type PriorityMetadataProducer func(pod *v1.Pod, filteredNodes []*v1.Node, sharedLister schedulerlisters.SharedLister) interface{}
 | 
					type MetadataProducer func(pod *v1.Pod, filteredNodes []*v1.Node, sharedLister schedulerlisters.SharedLister) interface{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PriorityConfig is a config used for a priority function.
 | 
					// PriorityConfig is a config used for a priority function.
 | 
				
			||||||
type PriorityConfig struct {
 | 
					type PriorityConfig struct {
 | 
				
			||||||
@@ -46,7 +46,7 @@ type PriorityConfig struct {
 | 
				
			|||||||
	Weight int64
 | 
						Weight int64
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EmptyPriorityMetadataProducer returns a no-op PriorityMetadataProducer type.
 | 
					// EmptyMetadataProducer returns a no-op MetadataProducer type.
 | 
				
			||||||
func EmptyPriorityMetadataProducer(pod *v1.Pod, filteredNodes []*v1.Node, sharedLister schedulerlisters.SharedLister) interface{} {
 | 
					func EmptyMetadataProducer(pod *v1.Pod, filteredNodes []*v1.Node, sharedLister schedulerlisters.SharedLister) interface{} {
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,15 +26,15 @@ import (
 | 
				
			|||||||
	st "k8s.io/kubernetes/pkg/scheduler/testing"
 | 
						st "k8s.io/kubernetes/pkg/scheduler/testing"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EmptyPriorityMetadataProducer should return a no-op PriorityMetadataProducer type.
 | 
					// EmptyMetadataProducer should return a no-op MetadataProducer type.
 | 
				
			||||||
func TestEmptyPriorityMetadataProducer(t *testing.T) {
 | 
					func TestEmptyPriorityMetadataProducer(t *testing.T) {
 | 
				
			||||||
	fakePod := st.MakePod().Name("p1").Node("node2").Obj()
 | 
						fakePod := st.MakePod().Name("p1").Node("node2").Obj()
 | 
				
			||||||
	fakeLabelSelector := labels.SelectorFromSet(labels.Set{"foo": "bar"})
 | 
						fakeLabelSelector := labels.SelectorFromSet(labels.Set{"foo": "bar"})
 | 
				
			||||||
	fakeNodes := []*v1.Node{st.MakeNode().Name("node1").Obj(), st.MakeNode().Name("node-a").Obj()}
 | 
						fakeNodes := []*v1.Node{st.MakeNode().Name("node1").Obj(), st.MakeNode().Name("node-a").Obj()}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	snapshot := nodeinfosnapshot.NewSnapshot([]*v1.Pod{fakePod}, fakeNodes)
 | 
						snapshot := nodeinfosnapshot.NewSnapshot([]*v1.Pod{fakePod}, fakeNodes)
 | 
				
			||||||
	// Test EmptyPriorityMetadataProducer
 | 
						// Test EmptyMetadataProducer
 | 
				
			||||||
	metadata := EmptyPriorityMetadataProducer(fakePod, fakeNodes, snapshot)
 | 
						metadata := EmptyMetadataProducer(fakePod, fakeNodes, snapshot)
 | 
				
			||||||
	if metadata != nil {
 | 
						if metadata != nil {
 | 
				
			||||||
		t.Errorf("failed to produce empty metadata: got %v, expected nil", metadata)
 | 
							t.Errorf("failed to produce empty metadata: got %v, expected nil", metadata)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -61,11 +61,11 @@ type PluginFactoryArgs struct {
 | 
				
			|||||||
	HardPodAffinitySymmetricWeight int32
 | 
						HardPodAffinitySymmetricWeight int32
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PriorityMetadataProducerFactory produces PriorityMetadataProducer from the given args.
 | 
					// PriorityMetadataProducerFactory produces MetadataProducer from the given args.
 | 
				
			||||||
type PriorityMetadataProducerFactory func(PluginFactoryArgs) priorities.PriorityMetadataProducer
 | 
					type PriorityMetadataProducerFactory func(PluginFactoryArgs) priorities.MetadataProducer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PredicateMetadataProducerFactory produces PredicateMetadataProducer from the given args.
 | 
					// PredicateMetadataProducerFactory produces MetadataProducer from the given args.
 | 
				
			||||||
type PredicateMetadataProducerFactory func(PluginFactoryArgs) predicates.PredicateMetadataProducer
 | 
					type PredicateMetadataProducerFactory func(PluginFactoryArgs) predicates.MetadataProducer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FitPredicateFactory produces a FitPredicate from the given args.
 | 
					// FitPredicateFactory produces a FitPredicate from the given args.
 | 
				
			||||||
type FitPredicateFactory func(PluginFactoryArgs) predicates.FitPredicate
 | 
					type FitPredicateFactory func(PluginFactoryArgs) predicates.FitPredicate
 | 
				
			||||||
@@ -90,8 +90,8 @@ var (
 | 
				
			|||||||
	algorithmProviderMap   = make(map[string]AlgorithmProviderConfig)
 | 
						algorithmProviderMap   = make(map[string]AlgorithmProviderConfig)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Registered metadata producers
 | 
						// Registered metadata producers
 | 
				
			||||||
	priorityMetadataProducer  PriorityMetadataProducerFactory
 | 
						priorityMetadataProducerFactory  PriorityMetadataProducerFactory
 | 
				
			||||||
	predicateMetadataProducer predicates.PredicateMetadataProducer
 | 
						predicateMetadataProducerFactory PredicateMetadataProducerFactory
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const (
 | 
					const (
 | 
				
			||||||
@@ -335,17 +335,17 @@ func IsFitPredicateRegistered(name string) bool {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterPriorityMetadataProducerFactory registers a PriorityMetadataProducerFactory.
 | 
					// RegisterPriorityMetadataProducerFactory registers a PriorityMetadataProducerFactory.
 | 
				
			||||||
func RegisterPriorityMetadataProducerFactory(factory PriorityMetadataProducerFactory) {
 | 
					func RegisterPriorityMetadataProducerFactory(f PriorityMetadataProducerFactory) {
 | 
				
			||||||
	schedulerFactoryMutex.Lock()
 | 
						schedulerFactoryMutex.Lock()
 | 
				
			||||||
	defer schedulerFactoryMutex.Unlock()
 | 
						defer schedulerFactoryMutex.Unlock()
 | 
				
			||||||
	priorityMetadataProducer = factory
 | 
						priorityMetadataProducerFactory = f
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterPredicateMetadataProducer registers a PredicateMetadataProducer.
 | 
					// RegisterPredicateMetadataProducerFactory registers a MetadataProducer.
 | 
				
			||||||
func RegisterPredicateMetadataProducer(producer predicates.PredicateMetadataProducer) {
 | 
					func RegisterPredicateMetadataProducerFactory(f PredicateMetadataProducerFactory) {
 | 
				
			||||||
	schedulerFactoryMutex.Lock()
 | 
						schedulerFactoryMutex.Lock()
 | 
				
			||||||
	defer schedulerFactoryMutex.Unlock()
 | 
						defer schedulerFactoryMutex.Unlock()
 | 
				
			||||||
	predicateMetadataProducer = producer
 | 
						predicateMetadataProducerFactory = f
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RegisterPriorityMapReduceFunction registers a priority function with the algorithm registry. Returns the name,
 | 
					// RegisterPriorityMapReduceFunction registers a priority function with the algorithm registry. Returns the name,
 | 
				
			||||||
@@ -561,24 +561,24 @@ func getFitPredicateFunctions(names sets.String, args PluginFactoryArgs) (map[st
 | 
				
			|||||||
	return fitPredicates, nil
 | 
						return fitPredicates, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getPriorityMetadataProducer(args PluginFactoryArgs) (priorities.PriorityMetadataProducer, error) {
 | 
					func getPriorityMetadataProducer(args PluginFactoryArgs) (priorities.MetadataProducer, error) {
 | 
				
			||||||
	schedulerFactoryMutex.Lock()
 | 
						schedulerFactoryMutex.Lock()
 | 
				
			||||||
	defer schedulerFactoryMutex.Unlock()
 | 
						defer schedulerFactoryMutex.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if priorityMetadataProducer == nil {
 | 
						if priorityMetadataProducerFactory == nil {
 | 
				
			||||||
		return priorities.EmptyPriorityMetadataProducer, nil
 | 
							return priorities.EmptyMetadataProducer, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return priorityMetadataProducer(args), nil
 | 
						return priorityMetadataProducerFactory(args), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getPredicateMetadataProducer() (predicates.PredicateMetadataProducer, error) {
 | 
					func getPredicateMetadataProducer(args PluginFactoryArgs) (predicates.MetadataProducer, error) {
 | 
				
			||||||
	schedulerFactoryMutex.Lock()
 | 
						schedulerFactoryMutex.Lock()
 | 
				
			||||||
	defer schedulerFactoryMutex.Unlock()
 | 
						defer schedulerFactoryMutex.Unlock()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if predicateMetadataProducer == nil {
 | 
						if predicateMetadataProducerFactory == nil {
 | 
				
			||||||
		return predicates.EmptyPredicateMetadataProducer, nil
 | 
							return predicates.EmptyMetadataProducer, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return predicateMetadataProducer, nil
 | 
						return predicateMetadataProducerFactory(args), nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]priorities.PriorityConfig, error) {
 | 
					func getPriorityFunctionConfigs(names sets.String, args PluginFactoryArgs) ([]priorities.PriorityConfig, error) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,11 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	// Register functions that extract metadata used by predicates computations.
 | 
						// Register functions that extract metadata used by predicates computations.
 | 
				
			||||||
	scheduler.RegisterPredicateMetadataProducer(predicates.GetPredicateMetadata)
 | 
						scheduler.RegisterPredicateMetadataProducerFactory(
 | 
				
			||||||
 | 
							func(args scheduler.PluginFactoryArgs) predicates.MetadataProducer {
 | 
				
			||||||
 | 
								f := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								return f.GetPredicateMetadata
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// IMPORTANT NOTES for predicate developers:
 | 
						// IMPORTANT NOTES for predicate developers:
 | 
				
			||||||
	// Registers predicates and priorities that are not enabled by default, but user can pick when creating their
 | 
						// Registers predicates and priorities that are not enabled by default, but user can pick when creating their
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,8 +25,8 @@ import (
 | 
				
			|||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
	// Register functions that extract metadata used by priorities computations.
 | 
						// Register functions that extract metadata used by priorities computations.
 | 
				
			||||||
	scheduler.RegisterPriorityMetadataProducerFactory(
 | 
						scheduler.RegisterPriorityMetadataProducerFactory(
 | 
				
			||||||
		func(args scheduler.PluginFactoryArgs) priorities.PriorityMetadataProducer {
 | 
							func(args scheduler.PluginFactoryArgs) priorities.MetadataProducer {
 | 
				
			||||||
			return priorities.NewPriorityMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister, args.HardPodAffinitySymmetricWeight)
 | 
								return priorities.NewMetadataFactory(args.ServiceLister, args.ControllerLister, args.ReplicaSetLister, args.StatefulSetLister, args.HardPodAffinitySymmetricWeight)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
 | 
						// ServiceSpreadingPriority is a priority config factory that spreads pods by minimizing
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -544,9 +544,9 @@ func TestGenericSchedulerWithExtenders(t *testing.T) {
 | 
				
			|||||||
				cache,
 | 
									cache,
 | 
				
			||||||
				queue,
 | 
									queue,
 | 
				
			||||||
				test.predicates,
 | 
									test.predicates,
 | 
				
			||||||
				predicates.EmptyPredicateMetadataProducer,
 | 
									predicates.EmptyMetadataProducer,
 | 
				
			||||||
				test.prioritizers,
 | 
									test.prioritizers,
 | 
				
			||||||
				priorities.EmptyPriorityMetadataProducer,
 | 
									priorities.EmptyMetadataProducer,
 | 
				
			||||||
				emptySnapshot,
 | 
									emptySnapshot,
 | 
				
			||||||
				emptyFramework,
 | 
									emptyFramework,
 | 
				
			||||||
				extenders,
 | 
									extenders,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -133,7 +133,7 @@ type ScheduleAlgorithm interface {
 | 
				
			|||||||
	// GetPredicateMetadataProducer returns the predicate metadata producer. This is needed
 | 
						// GetPredicateMetadataProducer returns the predicate metadata producer. This is needed
 | 
				
			||||||
	// for cluster autoscaler integration.
 | 
						// for cluster autoscaler integration.
 | 
				
			||||||
	// TODO(ahg-g): remove this once CA migrates to creating a Framework instead of a full scheduler.
 | 
						// TODO(ahg-g): remove this once CA migrates to creating a Framework instead of a full scheduler.
 | 
				
			||||||
	PredicateMetadataProducer() predicates.PredicateMetadataProducer
 | 
						PredicateMetadataProducer() predicates.MetadataProducer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ScheduleResult represents the result of one pod scheduled. It will contain
 | 
					// ScheduleResult represents the result of one pod scheduled. It will contain
 | 
				
			||||||
@@ -151,8 +151,8 @@ type genericScheduler struct {
 | 
				
			|||||||
	cache                    internalcache.Cache
 | 
						cache                    internalcache.Cache
 | 
				
			||||||
	schedulingQueue          internalqueue.SchedulingQueue
 | 
						schedulingQueue          internalqueue.SchedulingQueue
 | 
				
			||||||
	predicates               map[string]predicates.FitPredicate
 | 
						predicates               map[string]predicates.FitPredicate
 | 
				
			||||||
	priorityMetaProducer     priorities.PriorityMetadataProducer
 | 
						priorityMetaProducer     priorities.MetadataProducer
 | 
				
			||||||
	predicateMetaProducer    predicates.PredicateMetadataProducer
 | 
						predicateMetaProducer    predicates.MetadataProducer
 | 
				
			||||||
	prioritizers             []priorities.PriorityConfig
 | 
						prioritizers             []priorities.PriorityConfig
 | 
				
			||||||
	framework                framework.Framework
 | 
						framework                framework.Framework
 | 
				
			||||||
	extenders                []algorithm.SchedulerExtender
 | 
						extenders                []algorithm.SchedulerExtender
 | 
				
			||||||
@@ -176,7 +176,7 @@ func (g *genericScheduler) snapshot() error {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// GetPredicateMetadataProducer returns the predicate metadata producer. This is needed
 | 
					// GetPredicateMetadataProducer returns the predicate metadata producer. This is needed
 | 
				
			||||||
// for cluster autoscaler integration.
 | 
					// for cluster autoscaler integration.
 | 
				
			||||||
func (g *genericScheduler) PredicateMetadataProducer() predicates.PredicateMetadataProducer {
 | 
					func (g *genericScheduler) PredicateMetadataProducer() predicates.MetadataProducer {
 | 
				
			||||||
	return g.predicateMetaProducer
 | 
						return g.predicateMetaProducer
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -578,8 +578,8 @@ func (g *genericScheduler) findNodesThatFit(ctx context.Context, state *framewor
 | 
				
			|||||||
// addNominatedPods adds pods with equal or greater priority which are nominated
 | 
					// addNominatedPods adds pods with equal or greater priority which are nominated
 | 
				
			||||||
// to run on the node given in nodeInfo to meta and nodeInfo. It returns 1) whether
 | 
					// to run on the node given in nodeInfo to meta and nodeInfo. It returns 1) whether
 | 
				
			||||||
// any pod was added, 2) augmented metadata, 3) augmented CycleState 4) augmented nodeInfo.
 | 
					// any pod was added, 2) augmented metadata, 3) augmented CycleState 4) augmented nodeInfo.
 | 
				
			||||||
func (g *genericScheduler) addNominatedPods(ctx context.Context, pod *v1.Pod, meta predicates.PredicateMetadata, state *framework.CycleState,
 | 
					func (g *genericScheduler) addNominatedPods(ctx context.Context, pod *v1.Pod, meta predicates.Metadata, state *framework.CycleState,
 | 
				
			||||||
	nodeInfo *schedulernodeinfo.NodeInfo) (bool, predicates.PredicateMetadata,
 | 
						nodeInfo *schedulernodeinfo.NodeInfo) (bool, predicates.Metadata,
 | 
				
			||||||
	*framework.CycleState, *schedulernodeinfo.NodeInfo, error) {
 | 
						*framework.CycleState, *schedulernodeinfo.NodeInfo, error) {
 | 
				
			||||||
	if g.schedulingQueue == nil || nodeInfo == nil || nodeInfo.Node() == nil {
 | 
						if g.schedulingQueue == nil || nodeInfo == nil || nodeInfo.Node() == nil {
 | 
				
			||||||
		// This may happen only in tests.
 | 
							// This may happen only in tests.
 | 
				
			||||||
@@ -590,7 +590,7 @@ func (g *genericScheduler) addNominatedPods(ctx context.Context, pod *v1.Pod, me
 | 
				
			|||||||
		return false, meta, state, nodeInfo, nil
 | 
							return false, meta, state, nodeInfo, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	nodeInfoOut := nodeInfo.Clone()
 | 
						nodeInfoOut := nodeInfo.Clone()
 | 
				
			||||||
	var metaOut predicates.PredicateMetadata
 | 
						var metaOut predicates.Metadata
 | 
				
			||||||
	if meta != nil {
 | 
						if meta != nil {
 | 
				
			||||||
		metaOut = meta.ShallowCopy()
 | 
							metaOut = meta.ShallowCopy()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -629,7 +629,7 @@ func (g *genericScheduler) podFitsOnNode(
 | 
				
			|||||||
	ctx context.Context,
 | 
						ctx context.Context,
 | 
				
			||||||
	state *framework.CycleState,
 | 
						state *framework.CycleState,
 | 
				
			||||||
	pod *v1.Pod,
 | 
						pod *v1.Pod,
 | 
				
			||||||
	meta predicates.PredicateMetadata,
 | 
						meta predicates.Metadata,
 | 
				
			||||||
	info *schedulernodeinfo.NodeInfo,
 | 
						info *schedulernodeinfo.NodeInfo,
 | 
				
			||||||
	alwaysCheckAllPredicates bool,
 | 
						alwaysCheckAllPredicates bool,
 | 
				
			||||||
) (bool, []predicates.PredicateFailureReason, *framework.Status, error) {
 | 
					) (bool, []predicates.PredicateFailureReason, *framework.Status, error) {
 | 
				
			||||||
@@ -1012,7 +1012,7 @@ func (g *genericScheduler) selectNodesForPreemption(
 | 
				
			|||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		nodeInfoCopy := g.nodeInfoSnapshot.NodeInfoMap[nodeName].Clone()
 | 
							nodeInfoCopy := g.nodeInfoSnapshot.NodeInfoMap[nodeName].Clone()
 | 
				
			||||||
		var metaCopy predicates.PredicateMetadata
 | 
							var metaCopy predicates.Metadata
 | 
				
			||||||
		if meta != nil {
 | 
							if meta != nil {
 | 
				
			||||||
			metaCopy = meta.ShallowCopy()
 | 
								metaCopy = meta.ShallowCopy()
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -1091,7 +1091,7 @@ func (g *genericScheduler) selectVictimsOnNode(
 | 
				
			|||||||
	ctx context.Context,
 | 
						ctx context.Context,
 | 
				
			||||||
	state *framework.CycleState,
 | 
						state *framework.CycleState,
 | 
				
			||||||
	pod *v1.Pod,
 | 
						pod *v1.Pod,
 | 
				
			||||||
	meta predicates.PredicateMetadata,
 | 
						meta predicates.Metadata,
 | 
				
			||||||
	nodeInfo *schedulernodeinfo.NodeInfo,
 | 
						nodeInfo *schedulernodeinfo.NodeInfo,
 | 
				
			||||||
	pdbs []*policy.PodDisruptionBudget,
 | 
						pdbs []*policy.PodDisruptionBudget,
 | 
				
			||||||
) ([]*v1.Pod, int, bool) {
 | 
					) ([]*v1.Pod, int, bool) {
 | 
				
			||||||
@@ -1268,9 +1268,9 @@ func NewGenericScheduler(
 | 
				
			|||||||
	cache internalcache.Cache,
 | 
						cache internalcache.Cache,
 | 
				
			||||||
	podQueue internalqueue.SchedulingQueue,
 | 
						podQueue internalqueue.SchedulingQueue,
 | 
				
			||||||
	predicates map[string]predicates.FitPredicate,
 | 
						predicates map[string]predicates.FitPredicate,
 | 
				
			||||||
	predicateMetaProducer predicates.PredicateMetadataProducer,
 | 
						predicateMetaProducer predicates.MetadataProducer,
 | 
				
			||||||
	prioritizers []priorities.PriorityConfig,
 | 
						prioritizers []priorities.PriorityConfig,
 | 
				
			||||||
	priorityMetaProducer priorities.PriorityMetadataProducer,
 | 
						priorityMetaProducer priorities.MetadataProducer,
 | 
				
			||||||
	nodeInfoSnapshot *nodeinfosnapshot.Snapshot,
 | 
						nodeInfoSnapshot *nodeinfosnapshot.Snapshot,
 | 
				
			||||||
	framework framework.Framework,
 | 
						framework framework.Framework,
 | 
				
			||||||
	extenders []algorithm.SchedulerExtender,
 | 
						extenders []algorithm.SchedulerExtender,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,15 +57,15 @@ var (
 | 
				
			|||||||
	order         = []string{"false", "true", "matches", "nopods", algorithmpredicates.MatchInterPodAffinityPred}
 | 
						order         = []string{"false", "true", "matches", "nopods", algorithmpredicates.MatchInterPodAffinityPred}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func falsePredicate(pod *v1.Pod, meta algorithmpredicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
					func falsePredicate(pod *v1.Pod, meta algorithmpredicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
				
			||||||
	return false, []algorithmpredicates.PredicateFailureReason{algorithmpredicates.ErrFakePredicate}, nil
 | 
						return false, []algorithmpredicates.PredicateFailureReason{algorithmpredicates.ErrFakePredicate}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func truePredicate(pod *v1.Pod, meta algorithmpredicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
					func truePredicate(pod *v1.Pod, meta algorithmpredicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
				
			||||||
	return true, nil, nil
 | 
						return true, nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func matchesPredicate(pod *v1.Pod, meta algorithmpredicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
					func matchesPredicate(pod *v1.Pod, meta algorithmpredicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
				
			||||||
	node := nodeInfo.Node()
 | 
						node := nodeInfo.Node()
 | 
				
			||||||
	if node == nil {
 | 
						if node == nil {
 | 
				
			||||||
		return false, nil, fmt.Errorf("node not found")
 | 
							return false, nil, fmt.Errorf("node not found")
 | 
				
			||||||
@@ -76,7 +76,7 @@ func matchesPredicate(pod *v1.Pod, meta algorithmpredicates.PredicateMetadata, n
 | 
				
			|||||||
	return false, []algorithmpredicates.PredicateFailureReason{algorithmpredicates.ErrFakePredicate}, nil
 | 
						return false, []algorithmpredicates.PredicateFailureReason{algorithmpredicates.ErrFakePredicate}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func hasNoPodsPredicate(pod *v1.Pod, meta algorithmpredicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
					func hasNoPodsPredicate(pod *v1.Pod, meta algorithmpredicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
				
			||||||
	if len(nodeInfo.Pods()) == 0 {
 | 
						if len(nodeInfo.Pods()) == 0 {
 | 
				
			||||||
		return true, nil, nil
 | 
							return true, nil, nil
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -655,9 +655,10 @@ func TestGenericScheduler(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			pvcLister := fakelisters.PersistentVolumeClaimLister(pvcs)
 | 
								pvcLister := fakelisters.PersistentVolumeClaimLister(pvcs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			predMetaProducer := algorithmpredicates.EmptyPredicateMetadataProducer
 | 
								predMetaProducer := algorithmpredicates.EmptyMetadataProducer
 | 
				
			||||||
			if test.buildPredMeta {
 | 
								if test.buildPredMeta {
 | 
				
			||||||
				predMetaProducer = algorithmpredicates.GetPredicateMetadata
 | 
									f := &algorithmpredicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
									predMetaProducer = f.GetPredicateMetadata
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			scheduler := NewGenericScheduler(
 | 
								scheduler := NewGenericScheduler(
 | 
				
			||||||
				cache,
 | 
									cache,
 | 
				
			||||||
@@ -665,7 +666,7 @@ func TestGenericScheduler(t *testing.T) {
 | 
				
			|||||||
				test.predicates,
 | 
									test.predicates,
 | 
				
			||||||
				predMetaProducer,
 | 
									predMetaProducer,
 | 
				
			||||||
				test.prioritizers,
 | 
									test.prioritizers,
 | 
				
			||||||
				priorities.EmptyPriorityMetadataProducer,
 | 
									priorities.EmptyMetadataProducer,
 | 
				
			||||||
				emptySnapshot,
 | 
									emptySnapshot,
 | 
				
			||||||
				filterFramework,
 | 
									filterFramework,
 | 
				
			||||||
				[]algorithm.SchedulerExtender{},
 | 
									[]algorithm.SchedulerExtender{},
 | 
				
			||||||
@@ -703,9 +704,9 @@ func makeScheduler(predicates map[string]algorithmpredicates.FitPredicate, nodes
 | 
				
			|||||||
		cache,
 | 
							cache,
 | 
				
			||||||
		internalqueue.NewSchedulingQueue(nil, nil),
 | 
							internalqueue.NewSchedulingQueue(nil, nil),
 | 
				
			||||||
		predicates,
 | 
							predicates,
 | 
				
			||||||
		algorithmpredicates.EmptyPredicateMetadataProducer,
 | 
							algorithmpredicates.EmptyMetadataProducer,
 | 
				
			||||||
		nil,
 | 
							nil,
 | 
				
			||||||
		priorities.EmptyPriorityMetadataProducer,
 | 
							priorities.EmptyMetadataProducer,
 | 
				
			||||||
		emptySnapshot,
 | 
							emptySnapshot,
 | 
				
			||||||
		emptyFramework,
 | 
							emptyFramework,
 | 
				
			||||||
		nil, nil, nil, nil, false, false,
 | 
							nil, nil, nil, nil, false, false,
 | 
				
			||||||
@@ -782,7 +783,7 @@ type predicateCallCounter struct {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *predicateCallCounter) truePredicate() algorithmpredicates.FitPredicate {
 | 
					func (c *predicateCallCounter) truePredicate() algorithmpredicates.FitPredicate {
 | 
				
			||||||
	return func(pod *v1.Pod, meta algorithmpredicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
						return func(pod *v1.Pod, meta algorithmpredicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []algorithmpredicates.PredicateFailureReason, error) {
 | 
				
			||||||
		c.count++
 | 
							c.count++
 | 
				
			||||||
		return truePredicate(pod, meta, nodeInfo)
 | 
							return truePredicate(pod, meta, nodeInfo)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -823,9 +824,9 @@ func TestFindFitPredicateCallCounts(t *testing.T) {
 | 
				
			|||||||
			cache,
 | 
								cache,
 | 
				
			||||||
			queue,
 | 
								queue,
 | 
				
			||||||
			predicates,
 | 
								predicates,
 | 
				
			||||||
			algorithmpredicates.EmptyPredicateMetadataProducer,
 | 
								algorithmpredicates.EmptyMetadataProducer,
 | 
				
			||||||
			nil,
 | 
								nil,
 | 
				
			||||||
			priorities.EmptyPriorityMetadataProducer,
 | 
								priorities.EmptyMetadataProducer,
 | 
				
			||||||
			emptySnapshot,
 | 
								emptySnapshot,
 | 
				
			||||||
			emptyFramework,
 | 
								emptyFramework,
 | 
				
			||||||
			nil, nil, nil, nil, false, false,
 | 
								nil, nil, nil, nil, false, false,
 | 
				
			||||||
@@ -997,7 +998,7 @@ func TestZeroRequest(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
			snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				informerFactory.Core().V1().Services().Lister(),
 | 
									informerFactory.Core().V1().Services().Lister(),
 | 
				
			||||||
				informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
									informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
				
			||||||
				informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
									informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
				
			||||||
@@ -1407,14 +1408,15 @@ func TestSelectNodesForPreemption(t *testing.T) {
 | 
				
			|||||||
				cache.AddNode(&v1.Node{ObjectMeta: metav1.ObjectMeta{Name: name, Labels: map[string]string{"hostname": name}}})
 | 
									cache.AddNode(&v1.Node{ObjectMeta: metav1.ObjectMeta{Name: name, Labels: map[string]string{"hostname": name}}})
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								factory := &algorithmpredicates.MetadataProducerFactory{}
 | 
				
			||||||
			filterPlugin.failedNodeReturnCodeMap = filterFailedNodeReturnCodeMap
 | 
								filterPlugin.failedNodeReturnCodeMap = filterFailedNodeReturnCodeMap
 | 
				
			||||||
			scheduler := NewGenericScheduler(
 | 
								scheduler := NewGenericScheduler(
 | 
				
			||||||
				nil,
 | 
									nil,
 | 
				
			||||||
				internalqueue.NewSchedulingQueue(nil, nil),
 | 
									internalqueue.NewSchedulingQueue(nil, nil),
 | 
				
			||||||
				test.predicates,
 | 
									test.predicates,
 | 
				
			||||||
				algorithmpredicates.GetPredicateMetadata,
 | 
									factory.GetPredicateMetadata,
 | 
				
			||||||
				nil,
 | 
									nil,
 | 
				
			||||||
				priorities.EmptyPriorityMetadataProducer,
 | 
									priorities.EmptyMetadataProducer,
 | 
				
			||||||
				emptySnapshot,
 | 
									emptySnapshot,
 | 
				
			||||||
				filterFramework,
 | 
									filterFramework,
 | 
				
			||||||
				[]algorithm.SchedulerExtender{},
 | 
									[]algorithm.SchedulerExtender{},
 | 
				
			||||||
@@ -1667,18 +1669,19 @@ func TestPickOneNodeForPreemption(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			nodes := []*v1.Node{}
 | 
								var nodes []*v1.Node
 | 
				
			||||||
			for _, n := range test.nodes {
 | 
								for _, n := range test.nodes {
 | 
				
			||||||
				nodes = append(nodes, makeNode(n, priorityutil.DefaultMilliCPURequest*5, priorityutil.DefaultMemoryRequest*5))
 | 
									nodes = append(nodes, makeNode(n, priorityutil.DefaultMilliCPURequest*5, priorityutil.DefaultMemoryRequest*5))
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(test.pods, nodes)
 | 
				
			||||||
			fwk, _ := framework.NewFramework(emptyPluginRegistry, nil, []schedulerapi.PluginConfig{}, framework.WithSnapshotSharedLister(snapshot))
 | 
								fwk, _ := framework.NewFramework(emptyPluginRegistry, nil, []schedulerapi.PluginConfig{}, framework.WithSnapshotSharedLister(snapshot))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								factory := algorithmpredicates.MetadataProducerFactory{}
 | 
				
			||||||
			g := &genericScheduler{
 | 
								g := &genericScheduler{
 | 
				
			||||||
				framework:             fwk,
 | 
									framework:             fwk,
 | 
				
			||||||
				nodeInfoSnapshot:      snapshot,
 | 
									nodeInfoSnapshot:      snapshot,
 | 
				
			||||||
				predicates:            test.predicates,
 | 
									predicates:            test.predicates,
 | 
				
			||||||
				predicateMetaProducer: algorithmpredicates.GetPredicateMetadata,
 | 
									predicateMetaProducer: factory.GetPredicateMetadata,
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			assignDefaultStartTime(test.pods)
 | 
								assignDefaultStartTime(test.pods)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -2150,9 +2153,10 @@ func TestPreempt(t *testing.T) {
 | 
				
			|||||||
			if test.predicate != nil {
 | 
								if test.predicate != nil {
 | 
				
			||||||
				predicate = test.predicate
 | 
									predicate = test.predicate
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			predMetaProducer := algorithmpredicates.EmptyPredicateMetadataProducer
 | 
								predMetaProducer := algorithmpredicates.EmptyMetadataProducer
 | 
				
			||||||
			if test.buildPredMeta {
 | 
								if test.buildPredMeta {
 | 
				
			||||||
				predMetaProducer = algorithmpredicates.GetPredicateMetadata
 | 
									f := &algorithmpredicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
									predMetaProducer = f.GetPredicateMetadata
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			scheduler := NewGenericScheduler(
 | 
								scheduler := NewGenericScheduler(
 | 
				
			||||||
				cache,
 | 
									cache,
 | 
				
			||||||
@@ -2160,7 +2164,7 @@ func TestPreempt(t *testing.T) {
 | 
				
			|||||||
				map[string]algorithmpredicates.FitPredicate{"matches": predicate},
 | 
									map[string]algorithmpredicates.FitPredicate{"matches": predicate},
 | 
				
			||||||
				predMetaProducer,
 | 
									predMetaProducer,
 | 
				
			||||||
				[]priorities.PriorityConfig{{Map: numericMapPriority, Weight: 1}},
 | 
									[]priorities.PriorityConfig{{Map: numericMapPriority, Weight: 1}},
 | 
				
			||||||
				priorities.EmptyPriorityMetadataProducer,
 | 
									priorities.EmptyMetadataProducer,
 | 
				
			||||||
				emptySnapshot,
 | 
									emptySnapshot,
 | 
				
			||||||
				emptyFramework,
 | 
									emptyFramework,
 | 
				
			||||||
				extenders,
 | 
									extenders,
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -177,7 +177,7 @@ type Configurator struct {
 | 
				
			|||||||
	pluginConfigProducerRegistry *plugins.ConfigProducerRegistry
 | 
						pluginConfigProducerRegistry *plugins.ConfigProducerRegistry
 | 
				
			||||||
	nodeInfoSnapshot             *nodeinfosnapshot.Snapshot
 | 
						nodeInfoSnapshot             *nodeinfosnapshot.Snapshot
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	factoryArgs        *PluginFactoryArgs
 | 
						factoryArgs        PluginFactoryArgs
 | 
				
			||||||
	configProducerArgs *plugins.ConfigProducerArgs
 | 
						configProducerArgs *plugins.ConfigProducerArgs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -265,7 +265,7 @@ func NewConfigFactory(args *ConfigFactoryArgs) *Configurator {
 | 
				
			|||||||
		pluginConfigProducerRegistry:   args.PluginConfigProducerRegistry,
 | 
							pluginConfigProducerRegistry:   args.PluginConfigProducerRegistry,
 | 
				
			||||||
		nodeInfoSnapshot:               nodeinfosnapshot.NewEmptySnapshot(),
 | 
							nodeInfoSnapshot:               nodeinfosnapshot.NewEmptySnapshot(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	c.factoryArgs = &PluginFactoryArgs{
 | 
						c.factoryArgs = PluginFactoryArgs{
 | 
				
			||||||
		NodeInfoLister:                 c.nodeInfoSnapshot.NodeInfos(),
 | 
							NodeInfoLister:                 c.nodeInfoSnapshot.NodeInfos(),
 | 
				
			||||||
		PodLister:                      c.nodeInfoSnapshot.Pods(),
 | 
							PodLister:                      c.nodeInfoSnapshot.Pods(),
 | 
				
			||||||
		ServiceLister:                  c.serviceLister,
 | 
							ServiceLister:                  c.serviceLister,
 | 
				
			||||||
@@ -405,12 +405,12 @@ func (c *Configurator) CreateFromKeys(predicateKeys, priorityKeys sets.String, e
 | 
				
			|||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	priorityMetaProducer, err := getPriorityMetadataProducer(*c.factoryArgs)
 | 
						priorityMetaProducer, err := getPriorityMetadataProducer(c.factoryArgs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	predicateMetaProducer, err := c.GetPredicateMetadataProducer()
 | 
						predicateMetaProducer, err := getPredicateMetadataProducer(c.factoryArgs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -510,7 +510,7 @@ func getBinderFunc(client clientset.Interface, extenders []algorithm.SchedulerEx
 | 
				
			|||||||
// as framework plugins. Specifically, a priority will run as a framework plugin if a plugin config producer was
 | 
					// as framework plugins. Specifically, a priority will run as a framework plugin if a plugin config producer was
 | 
				
			||||||
// registered for that priority.
 | 
					// registered for that priority.
 | 
				
			||||||
func (c *Configurator) getPriorityConfigs(priorityKeys sets.String) ([]priorities.PriorityConfig, *schedulerapi.Plugins, []schedulerapi.PluginConfig, error) {
 | 
					func (c *Configurator) getPriorityConfigs(priorityKeys sets.String) ([]priorities.PriorityConfig, *schedulerapi.Plugins, []schedulerapi.PluginConfig, error) {
 | 
				
			||||||
	allPriorityConfigs, err := getPriorityFunctionConfigs(priorityKeys, *c.factoryArgs)
 | 
						allPriorityConfigs, err := getPriorityFunctionConfigs(priorityKeys, c.factoryArgs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, nil, err
 | 
							return nil, nil, nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -537,19 +537,13 @@ func (c *Configurator) getPriorityConfigs(priorityKeys sets.String) ([]prioritie
 | 
				
			|||||||
	return priorityConfigs, &plugins, pluginConfig, nil
 | 
						return priorityConfigs, &plugins, pluginConfig, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// GetPredicateMetadataProducer returns a function to build Predicate Metadata.
 | 
					 | 
				
			||||||
// It is used by the scheduler and other components, such as k8s.io/autoscaler/cluster-autoscaler.
 | 
					 | 
				
			||||||
func (c *Configurator) GetPredicateMetadataProducer() (predicates.PredicateMetadataProducer, error) {
 | 
					 | 
				
			||||||
	return getPredicateMetadataProducer()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// getPredicateConfigs returns predicates configuration: ones that will run as fitPredicates and ones that will run
 | 
					// getPredicateConfigs returns predicates configuration: ones that will run as fitPredicates and ones that will run
 | 
				
			||||||
// as framework plugins. Specifically, a predicate will run as a framework plugin if a plugin config producer was
 | 
					// as framework plugins. Specifically, a predicate will run as a framework plugin if a plugin config producer was
 | 
				
			||||||
// registered for that predicate.
 | 
					// registered for that predicate.
 | 
				
			||||||
// Note that the framework executes plugins according to their order in the Plugins list, and so predicates run as plugins
 | 
					// Note that the framework executes plugins according to their order in the Plugins list, and so predicates run as plugins
 | 
				
			||||||
// are added to the Plugins list according to the order specified in predicates.Ordering().
 | 
					// are added to the Plugins list according to the order specified in predicates.Ordering().
 | 
				
			||||||
func (c *Configurator) getPredicateConfigs(predicateKeys sets.String) (map[string]predicates.FitPredicate, *schedulerapi.Plugins, []schedulerapi.PluginConfig, error) {
 | 
					func (c *Configurator) getPredicateConfigs(predicateKeys sets.String) (map[string]predicates.FitPredicate, *schedulerapi.Plugins, []schedulerapi.PluginConfig, error) {
 | 
				
			||||||
	allFitPredicates, err := getFitPredicateFunctions(predicateKeys, *c.factoryArgs)
 | 
						allFitPredicates, err := getFitPredicateFunctions(predicateKeys, c.factoryArgs)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, nil, err
 | 
							return nil, nil, nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -297,7 +297,7 @@ func TestCreateFromConfigWithEmptyPredicatesOrPriorities(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func PredicateFunc(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
					func PredicateFunc(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
				
			||||||
	return true, nil, nil
 | 
						return true, nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -352,7 +352,7 @@ func TestDefaultPodTopologySpreadScore(t *testing.T) {
 | 
				
			|||||||
				fakelisters.StatefulSetLister(test.sss),
 | 
									fakelisters.StatefulSetLister(test.sss),
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				fakelisters.ServiceLister(test.services),
 | 
									fakelisters.ServiceLister(test.services),
 | 
				
			||||||
				fakelisters.ControllerLister(test.rcs),
 | 
									fakelisters.ControllerLister(test.rcs),
 | 
				
			||||||
				fakelisters.ReplicaSetLister(test.rss),
 | 
									fakelisters.ReplicaSetLister(test.rss),
 | 
				
			||||||
@@ -610,7 +610,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
 | 
				
			|||||||
				fakelisters.ReplicaSetLister(test.rss),
 | 
									fakelisters.ReplicaSetLister(test.rss),
 | 
				
			||||||
				fakelisters.StatefulSetLister(test.sss),
 | 
									fakelisters.StatefulSetLister(test.sss),
 | 
				
			||||||
			)
 | 
								)
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				fakelisters.ServiceLister(test.services),
 | 
									fakelisters.ServiceLister(test.services),
 | 
				
			||||||
				fakelisters.ControllerLister(test.rcs),
 | 
									fakelisters.ControllerLister(test.rcs),
 | 
				
			||||||
				fakelisters.ReplicaSetLister(test.rss),
 | 
									fakelisters.ReplicaSetLister(test.rss),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -193,7 +193,7 @@ func TestImageLocalityPriority(t *testing.T) {
 | 
				
			|||||||
			client := clientsetfake.NewSimpleClientset()
 | 
								client := clientsetfake.NewSimpleClientset()
 | 
				
			||||||
			informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
								informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				informerFactory.Core().V1().Services().Lister(),
 | 
									informerFactory.Core().V1().Services().Lister(),
 | 
				
			||||||
				informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
									informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
				
			||||||
				informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
									informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,9 +48,9 @@ func (pl *InterPodAffinity) Name() string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Filter invoked at the filter extension point.
 | 
					// Filter invoked at the filter extension point.
 | 
				
			||||||
func (pl *InterPodAffinity) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
					func (pl *InterPodAffinity) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
				
			||||||
	meta, ok := migration.PredicateMetadata(cycleState).(predicates.PredicateMetadata)
 | 
						meta, ok := migration.PredicateMetadata(cycleState).(predicates.Metadata)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return migration.ErrorToFrameworkStatus(fmt.Errorf("%+v convert to predicates.PredicateMetadata error", cycleState))
 | 
							return migration.ErrorToFrameworkStatus(fmt.Errorf("%+v convert to predicates.Metadata error", cycleState))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, reasons, err := pl.predicate(pod, meta, nodeInfo)
 | 
						_, reasons, err := pl.predicate(pod, meta, nodeInfo)
 | 
				
			||||||
	return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
						return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -736,7 +736,8 @@ func TestSingleNode(t *testing.T) {
 | 
				
			|||||||
	for _, test := range tests {
 | 
						for _, test := range tests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			snapshot := nodeinfosnapshot.NewSnapshot(test.pods, []*v1.Node{test.node})
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(test.pods, []*v1.Node{test.node})
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(test.pod, snapshot)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(test.pod, snapshot)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1437,7 +1438,8 @@ func TestMultipleNodes(t *testing.T) {
 | 
				
			|||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(test.pods, test.nodes)
 | 
				
			||||||
			for indexNode, node := range test.nodes {
 | 
								for indexNode, node := range test.nodes {
 | 
				
			||||||
				meta := predicates.GetPredicateMetadata(test.pod, snapshot)
 | 
									factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
									meta := factory.GetPredicateMetadata(test.pod, snapshot)
 | 
				
			||||||
				state := framework.NewCycleState()
 | 
									state := framework.NewCycleState()
 | 
				
			||||||
				state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
									state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1947,7 +1949,7 @@ func TestInterPodAffinityPriority(t *testing.T) {
 | 
				
			|||||||
			client := clientsetfake.NewSimpleClientset()
 | 
								client := clientsetfake.NewSimpleClientset()
 | 
				
			||||||
			informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
								informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				informerFactory.Core().V1().Services().Lister(),
 | 
									informerFactory.Core().V1().Services().Lister(),
 | 
				
			||||||
				informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
									informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
				
			||||||
				informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
									informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
				
			||||||
@@ -2062,7 +2064,7 @@ func TestHardPodAffinitySymmetricWeight(t *testing.T) {
 | 
				
			|||||||
			client := clientsetfake.NewSimpleClientset()
 | 
								client := clientsetfake.NewSimpleClientset()
 | 
				
			||||||
			informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
								informerFactory := informers.NewSharedInformerFactory(client, 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				informerFactory.Core().V1().Services().Lister(),
 | 
									informerFactory.Core().V1().Services().Lister(),
 | 
				
			||||||
				informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
									informerFactory.Core().V1().ReplicationControllers().Lister(),
 | 
				
			||||||
				informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
									informerFactory.Apps().V1().ReplicaSets().Lister(),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -57,18 +57,18 @@ func ErrorToFrameworkStatus(err error) *framework.Status {
 | 
				
			|||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// PredicatesStateData is a pointer to PredicateMetadata. In the normal case, StateData is supposed to
 | 
					// PredicatesStateData is a pointer to Metadata. In the normal case, StateData is supposed to
 | 
				
			||||||
// be generated and stored in CycleState by a framework plugin (like a PreFilter pre-computing data for
 | 
					// be generated and stored in CycleState by a framework plugin (like a PreFilter pre-computing data for
 | 
				
			||||||
// its corresponding Filter). However, during migration, the scheduler will inject a pointer to
 | 
					// its corresponding Filter). However, during migration, the scheduler will inject a pointer to
 | 
				
			||||||
// PredicateMetadata into CycleState. This "hack" is necessary because during migration Filters that implement
 | 
					// Metadata into CycleState. This "hack" is necessary because during migration Filters that implement
 | 
				
			||||||
// predicates functionality will be calling into the existing predicate functions, and need
 | 
					// predicates functionality will be calling into the existing predicate functions, and need
 | 
				
			||||||
// to pass PredicateMetadata.
 | 
					// to pass Metadata.
 | 
				
			||||||
type PredicatesStateData struct {
 | 
					type PredicatesStateData struct {
 | 
				
			||||||
	Reference interface{}
 | 
						Reference interface{}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Clone is supposed to make a copy of the data, but since this is just a pointer, we are practically
 | 
					// Clone is supposed to make a copy of the data, but since this is just a pointer, we are practically
 | 
				
			||||||
// just copying the pointer. This is ok because the actual reference to the PredicateMetadata
 | 
					// just copying the pointer. This is ok because the actual reference to the Metadata
 | 
				
			||||||
// copy that is made by generic_scheduler during preemption cycle will be injected again outside
 | 
					// copy that is made by generic_scheduler during preemption cycle will be injected again outside
 | 
				
			||||||
// the framework.
 | 
					// the framework.
 | 
				
			||||||
func (p *PredicatesStateData) Clone() framework.StateData {
 | 
					func (p *PredicatesStateData) Clone() framework.StateData {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,9 +43,9 @@ func (f *Fit) Name() string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Filter invoked at the filter extension point.
 | 
					// Filter invoked at the filter extension point.
 | 
				
			||||||
func (f *Fit) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
					func (f *Fit) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
				
			||||||
	meta, ok := migration.PredicateMetadata(cycleState).(predicates.PredicateMetadata)
 | 
						meta, ok := migration.PredicateMetadata(cycleState).(predicates.Metadata)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return migration.ErrorToFrameworkStatus(fmt.Errorf("%+v convert to predicates.PredicateMetadata error", cycleState))
 | 
							return migration.ErrorToFrameworkStatus(fmt.Errorf("%+v convert to predicates.Metadata error", cycleState))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, reasons, err := predicates.PodFitsResources(pod, meta, nodeInfo)
 | 
						_, reasons, err := predicates.PodFitsResources(pod, meta, nodeInfo)
 | 
				
			||||||
	return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
						return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -343,7 +343,8 @@ func TestNodeResourcesFit(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range enoughPodsTests {
 | 
						for _, test := range enoughPodsTests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(test.pod, nil)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(test.pod, nil)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -396,7 +397,8 @@ func TestNodeResourcesFit(t *testing.T) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	for _, test := range notEnoughPodsTests {
 | 
						for _, test := range notEnoughPodsTests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(test.pod, nil)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(test.pod, nil)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -447,7 +449,8 @@ func TestNodeResourcesFit(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for _, test := range storagePodsTests {
 | 
						for _, test := range storagePodsTests {
 | 
				
			||||||
		t.Run(test.name, func(t *testing.T) {
 | 
							t.Run(test.name, func(t *testing.T) {
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(test.pod, nil)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(test.pod, nil)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,9 +47,9 @@ func (pl *PodTopologySpread) Name() string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Filter invoked at the filter extension point.
 | 
					// Filter invoked at the filter extension point.
 | 
				
			||||||
func (pl *PodTopologySpread) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
					func (pl *PodTopologySpread) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
				
			||||||
	meta, ok := migration.PredicateMetadata(cycleState).(predicates.PredicateMetadata)
 | 
						meta, ok := migration.PredicateMetadata(cycleState).(predicates.Metadata)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return migration.ErrorToFrameworkStatus(fmt.Errorf("%+v convert to predicates.PredicateMetadata error", cycleState))
 | 
							return migration.ErrorToFrameworkStatus(fmt.Errorf("%+v convert to predicates.Metadata error", cycleState))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, reasons, err := predicates.EvenPodsSpreadPredicate(pod, meta, nodeInfo)
 | 
						_, reasons, err := predicates.EvenPodsSpreadPredicate(pod, meta, nodeInfo)
 | 
				
			||||||
	return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
						return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -270,7 +270,8 @@ func TestPodTopologySpread_Filter_SingleConstraint(t *testing.T) {
 | 
				
			|||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(tt.pod, snapshot)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(tt.pod, snapshot)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
			plugin, _ := New(nil, nil)
 | 
								plugin, _ := New(nil, nil)
 | 
				
			||||||
@@ -467,7 +468,8 @@ func TestPodTopologySpread_Filter_MultipleConstraints(t *testing.T) {
 | 
				
			|||||||
	for _, tt := range tests {
 | 
						for _, tt := range tests {
 | 
				
			||||||
		t.Run(tt.name, func(t *testing.T) {
 | 
							t.Run(tt.name, func(t *testing.T) {
 | 
				
			||||||
			snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
								snapshot := nodeinfosnapshot.NewSnapshot(tt.existingPods, tt.nodes)
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(tt.pod, snapshot)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(tt.pod, snapshot)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
			plugin, _ := New(nil, nil)
 | 
								plugin, _ := New(nil, nil)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -85,9 +85,9 @@ func (pl *ServiceAffinity) Name() string {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Filter invoked at the filter extension point.
 | 
					// Filter invoked at the filter extension point.
 | 
				
			||||||
func (pl *ServiceAffinity) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
					func (pl *ServiceAffinity) Filter(ctx context.Context, cycleState *framework.CycleState, pod *v1.Pod, nodeInfo *nodeinfo.NodeInfo) *framework.Status {
 | 
				
			||||||
	meta, ok := migration.PredicateMetadata(cycleState).(predicates.PredicateMetadata)
 | 
						meta, ok := migration.PredicateMetadata(cycleState).(predicates.Metadata)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		return framework.NewStatus(framework.Error, "looking up PredicateMetadata")
 | 
							return framework.NewStatus(framework.Error, "looking up Metadata")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	_, reasons, err := pl.predicate(pod, meta, nodeInfo)
 | 
						_, reasons, err := pl.predicate(pod, meta, nodeInfo)
 | 
				
			||||||
	return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
						return migration.PredicateResultToFrameworkStatus(reasons, err)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -172,7 +172,8 @@ func TestServiceAffinity(t *testing.T) {
 | 
				
			|||||||
				predicate: predicate,
 | 
									predicate: predicate,
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			meta := predicates.GetPredicateMetadata(test.pod, snapshot)
 | 
								factory := &predicates.MetadataProducerFactory{}
 | 
				
			||||||
 | 
								meta := factory.GetPredicateMetadata(test.pod, snapshot)
 | 
				
			||||||
			state := framework.NewCycleState()
 | 
								state := framework.NewCycleState()
 | 
				
			||||||
			state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
								state.Write(migration.PredicatesStateKey, &migration.PredicatesStateData{Reference: meta})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -399,7 +400,7 @@ func TestServiceAffinityScore(t *testing.T) {
 | 
				
			|||||||
				priorityMapFunction:    priorityMapFunction,
 | 
									priorityMapFunction:    priorityMapFunction,
 | 
				
			||||||
				priorityReduceFunction: priorityReduceFunction,
 | 
									priorityReduceFunction: priorityReduceFunction,
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			metaDataProducer := priorities.NewPriorityMetadataFactory(
 | 
								metaDataProducer := priorities.NewMetadataFactory(
 | 
				
			||||||
				fakelisters.ServiceLister(test.services),
 | 
									fakelisters.ServiceLister(test.services),
 | 
				
			||||||
				fakelisters.ControllerLister(rcs),
 | 
									fakelisters.ControllerLister(rcs),
 | 
				
			||||||
				fakelisters.ReplicaSetLister(rss),
 | 
									fakelisters.ReplicaSetLister(rss),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -139,7 +139,7 @@ func podWithResources(id, desiredHost string, limits v1.ResourceList, requests v
 | 
				
			|||||||
	return pod
 | 
						return pod
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func PredicateOne(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
					func PredicateOne(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
				
			||||||
	return true, nil, nil
 | 
						return true, nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -152,7 +152,7 @@ type mockScheduler struct {
 | 
				
			|||||||
	err    error
 | 
						err    error
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (es mockScheduler) PredicateMetadataProducer() predicates.PredicateMetadataProducer {
 | 
					func (es mockScheduler) PredicateMetadataProducer() predicates.MetadataProducer {
 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -647,9 +647,9 @@ func setupTestScheduler(queuedPodStore *clientcache.FIFO, scache internalcache.C
 | 
				
			|||||||
		scache,
 | 
							scache,
 | 
				
			||||||
		internalqueue.NewSchedulingQueue(nil, nil),
 | 
							internalqueue.NewSchedulingQueue(nil, nil),
 | 
				
			||||||
		predicateMap,
 | 
							predicateMap,
 | 
				
			||||||
		predicates.EmptyPredicateMetadataProducer,
 | 
							predicates.EmptyMetadataProducer,
 | 
				
			||||||
		[]priorities.PriorityConfig{},
 | 
							[]priorities.PriorityConfig{},
 | 
				
			||||||
		priorities.EmptyPriorityMetadataProducer,
 | 
							priorities.EmptyMetadataProducer,
 | 
				
			||||||
		emptySnapshot,
 | 
							emptySnapshot,
 | 
				
			||||||
		emptyFramework,
 | 
							emptyFramework,
 | 
				
			||||||
		[]algorithm.SchedulerExtender{},
 | 
							[]algorithm.SchedulerExtender{},
 | 
				
			||||||
@@ -698,9 +698,9 @@ func setupTestSchedulerLongBindingWithRetry(queuedPodStore *clientcache.FIFO, sc
 | 
				
			|||||||
		scache,
 | 
							scache,
 | 
				
			||||||
		internalqueue.NewSchedulingQueue(nil, nil),
 | 
							internalqueue.NewSchedulingQueue(nil, nil),
 | 
				
			||||||
		predicateMap,
 | 
							predicateMap,
 | 
				
			||||||
		predicates.EmptyPredicateMetadataProducer,
 | 
							predicates.EmptyMetadataProducer,
 | 
				
			||||||
		[]priorities.PriorityConfig{},
 | 
							[]priorities.PriorityConfig{},
 | 
				
			||||||
		priorities.EmptyPriorityMetadataProducer,
 | 
							priorities.EmptyMetadataProducer,
 | 
				
			||||||
		emptySnapshot,
 | 
							emptySnapshot,
 | 
				
			||||||
		emptyFramework,
 | 
							emptyFramework,
 | 
				
			||||||
		[]algorithm.SchedulerExtender{},
 | 
							[]algorithm.SchedulerExtender{},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -54,11 +54,11 @@ type nodeStateManager struct {
 | 
				
			|||||||
	makeUnSchedulable nodeMutationFunc
 | 
						makeUnSchedulable nodeMutationFunc
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func PredicateOne(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
					func PredicateOne(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
				
			||||||
	return true, nil, nil
 | 
						return true, nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func PredicateTwo(pod *v1.Pod, meta predicates.PredicateMetadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
					func PredicateTwo(pod *v1.Pod, meta predicates.Metadata, nodeInfo *schedulernodeinfo.NodeInfo) (bool, []predicates.PredicateFailureReason, error) {
 | 
				
			||||||
	return true, nil, nil
 | 
						return true, nil, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user