mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	change the QueueingHintFn to pass a logger
This commit is contained in:
		@@ -217,20 +217,10 @@ type dynamicResources struct {
 | 
				
			|||||||
	claimLister                resourcev1alpha2listers.ResourceClaimLister
 | 
						claimLister                resourcev1alpha2listers.ResourceClaimLister
 | 
				
			||||||
	classLister                resourcev1alpha2listers.ResourceClassLister
 | 
						classLister                resourcev1alpha2listers.ResourceClassLister
 | 
				
			||||||
	podSchedulingContextLister resourcev1alpha2listers.PodSchedulingContextLister
 | 
						podSchedulingContextLister resourcev1alpha2listers.PodSchedulingContextLister
 | 
				
			||||||
 | 
					 | 
				
			||||||
	// logger is only meant to be used by background activities which don't
 | 
					 | 
				
			||||||
	// have some other logger in their parent callstack.
 | 
					 | 
				
			||||||
	logger klog.Logger
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// New initializes a new plugin and returns it.
 | 
					// New initializes a new plugin and returns it.
 | 
				
			||||||
func New(plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) {
 | 
					func New(plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) {
 | 
				
			||||||
	// TODO: the runtime should set up logging for each plugin, including
 | 
					 | 
				
			||||||
	// adding a name for each one (same as in kube-controller-manager).
 | 
					 | 
				
			||||||
	return NewWithLogger(klog.TODO(), plArgs, fh, fts)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func NewWithLogger(logger klog.Logger, plArgs runtime.Object, fh framework.Handle, fts feature.Features) (framework.Plugin, error) {
 | 
					 | 
				
			||||||
	if !fts.EnableDynamicResourceAllocation {
 | 
						if !fts.EnableDynamicResourceAllocation {
 | 
				
			||||||
		// Disabled, won't do anything.
 | 
							// Disabled, won't do anything.
 | 
				
			||||||
		return &dynamicResources{}, nil
 | 
							return &dynamicResources{}, nil
 | 
				
			||||||
@@ -243,7 +233,6 @@ func NewWithLogger(logger klog.Logger, plArgs runtime.Object, fh framework.Handl
 | 
				
			|||||||
		claimLister:                fh.SharedInformerFactory().Resource().V1alpha2().ResourceClaims().Lister(),
 | 
							claimLister:                fh.SharedInformerFactory().Resource().V1alpha2().ResourceClaims().Lister(),
 | 
				
			||||||
		classLister:                fh.SharedInformerFactory().Resource().V1alpha2().ResourceClasses().Lister(),
 | 
							classLister:                fh.SharedInformerFactory().Resource().V1alpha2().ResourceClasses().Lister(),
 | 
				
			||||||
		podSchedulingContextLister: fh.SharedInformerFactory().Resource().V1alpha2().PodSchedulingContexts().Lister(),
 | 
							podSchedulingContextLister: fh.SharedInformerFactory().Resource().V1alpha2().PodSchedulingContexts().Lister(),
 | 
				
			||||||
		logger:                     logger,
 | 
					 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -294,7 +283,7 @@ func (pl *dynamicResources) PreEnqueue(ctx context.Context, pod *v1.Pod) (status
 | 
				
			|||||||
// an informer. It checks whether that change made a previously unschedulable
 | 
					// an informer. It checks whether that change made a previously unschedulable
 | 
				
			||||||
// pod schedulable. It errs on the side of letting a pod scheduling attempt
 | 
					// pod schedulable. It errs on the side of letting a pod scheduling attempt
 | 
				
			||||||
// happen.
 | 
					// happen.
 | 
				
			||||||
func (pl *dynamicResources) isSchedulableAfterClaimChange(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
					func (pl *dynamicResources) isSchedulableAfterClaimChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
	if newObj == nil {
 | 
						if newObj == nil {
 | 
				
			||||||
		// Deletes don't make a pod schedulable.
 | 
							// Deletes don't make a pod schedulable.
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
@@ -303,7 +292,7 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(pod *v1.Pod, oldObj, n
 | 
				
			|||||||
	_, modifiedClaim, err := schedutil.As[*resourcev1alpha2.ResourceClaim](nil, newObj)
 | 
						_, modifiedClaim, err := schedutil.As[*resourcev1alpha2.ResourceClaim](nil, newObj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// Shouldn't happen.
 | 
							// Shouldn't happen.
 | 
				
			||||||
		pl.logger.Error(err, "unexpected new object in isSchedulableAfterClaimChange")
 | 
							logger.Error(err, "unexpected new object in isSchedulableAfterClaimChange")
 | 
				
			||||||
		return framework.QueueAfterBackoff
 | 
							return framework.QueueAfterBackoff
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -316,18 +305,18 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(pod *v1.Pod, oldObj, n
 | 
				
			|||||||
		// This is not an unexpected error: we know that
 | 
							// This is not an unexpected error: we know that
 | 
				
			||||||
		// foreachPodResourceClaim only returns errors for "not
 | 
							// foreachPodResourceClaim only returns errors for "not
 | 
				
			||||||
		// schedulable".
 | 
							// schedulable".
 | 
				
			||||||
		pl.logger.V(4).Info("pod is not schedulable", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim), "reason", err.Error())
 | 
							logger.V(4).Info("pod is not schedulable", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim), "reason", err.Error())
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if !usesClaim {
 | 
						if !usesClaim {
 | 
				
			||||||
		// This was not the claim the pod was waiting for.
 | 
							// This was not the claim the pod was waiting for.
 | 
				
			||||||
		pl.logger.V(6).Info("unrelated claim got modified", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
							logger.V(6).Info("unrelated claim got modified", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if oldObj == nil {
 | 
						if oldObj == nil {
 | 
				
			||||||
		pl.logger.V(4).Info("claim for pod got created", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
							logger.V(4).Info("claim for pod got created", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
				
			||||||
		return framework.QueueImmediately
 | 
							return framework.QueueImmediately
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -338,20 +327,20 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(pod *v1.Pod, oldObj, n
 | 
				
			|||||||
	originalClaim, ok := oldObj.(*resourcev1alpha2.ResourceClaim)
 | 
						originalClaim, ok := oldObj.(*resourcev1alpha2.ResourceClaim)
 | 
				
			||||||
	if !ok {
 | 
						if !ok {
 | 
				
			||||||
		// Shouldn't happen.
 | 
							// Shouldn't happen.
 | 
				
			||||||
		pl.logger.Error(nil, "unexpected old object in isSchedulableAfterClaimAddOrUpdate", "obj", oldObj)
 | 
							logger.Error(nil, "unexpected old object in isSchedulableAfterClaimAddOrUpdate", "obj", oldObj)
 | 
				
			||||||
		return framework.QueueAfterBackoff
 | 
							return framework.QueueAfterBackoff
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if apiequality.Semantic.DeepEqual(&originalClaim.Status, &modifiedClaim.Status) {
 | 
						if apiequality.Semantic.DeepEqual(&originalClaim.Status, &modifiedClaim.Status) {
 | 
				
			||||||
		if loggerV := pl.logger.V(7); loggerV.Enabled() {
 | 
							if loggerV := logger.V(7); loggerV.Enabled() {
 | 
				
			||||||
			// Log more information.
 | 
								// Log more information.
 | 
				
			||||||
			loggerV.Info("claim for pod got modified where the pod doesn't care", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim), "diff", cmp.Diff(originalClaim, modifiedClaim))
 | 
								loggerV.Info("claim for pod got modified where the pod doesn't care", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim), "diff", cmp.Diff(originalClaim, modifiedClaim))
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			pl.logger.V(6).Info("claim for pod got modified where the pod doesn't care", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
								logger.V(6).Info("claim for pod got modified where the pod doesn't care", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pl.logger.V(4).Info("status of claim for pod got updated", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
						logger.V(4).Info("status of claim for pod got updated", "pod", klog.KObj(pod), "claim", klog.KObj(modifiedClaim))
 | 
				
			||||||
	return framework.QueueImmediately
 | 
						return framework.QueueImmediately
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -360,24 +349,24 @@ func (pl *dynamicResources) isSchedulableAfterClaimChange(pod *v1.Pod, oldObj, n
 | 
				
			|||||||
// change made a previously unschedulable pod schedulable (updated) or a new
 | 
					// change made a previously unschedulable pod schedulable (updated) or a new
 | 
				
			||||||
// attempt is needed to re-create the object (deleted). It errs on the side of
 | 
					// attempt is needed to re-create the object (deleted). It errs on the side of
 | 
				
			||||||
// letting a pod scheduling attempt happen.
 | 
					// letting a pod scheduling attempt happen.
 | 
				
			||||||
func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
					func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
	// Deleted? That can happen because we ourselves delete the PodSchedulingContext while
 | 
						// Deleted? That can happen because we ourselves delete the PodSchedulingContext while
 | 
				
			||||||
	// working on the pod. This can be ignored.
 | 
						// working on the pod. This can be ignored.
 | 
				
			||||||
	if oldObj != nil && newObj == nil {
 | 
						if oldObj != nil && newObj == nil {
 | 
				
			||||||
		pl.logger.V(4).Info("PodSchedulingContext got deleted")
 | 
							logger.V(4).Info("PodSchedulingContext got deleted")
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	oldPodScheduling, newPodScheduling, err := schedutil.As[*resourcev1alpha2.PodSchedulingContext](oldObj, newObj)
 | 
						oldPodScheduling, newPodScheduling, err := schedutil.As[*resourcev1alpha2.PodSchedulingContext](oldObj, newObj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		// Shouldn't happen.
 | 
							// Shouldn't happen.
 | 
				
			||||||
		pl.logger.Error(nil, "isSchedulableAfterPodSchedulingChange")
 | 
							logger.Error(nil, "isSchedulableAfterPodSchedulingChange")
 | 
				
			||||||
		return framework.QueueAfterBackoff
 | 
							return framework.QueueAfterBackoff
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	podScheduling := newPodScheduling // Never nil because deletes are handled above.
 | 
						podScheduling := newPodScheduling // Never nil because deletes are handled above.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if podScheduling.Name != pod.Name || podScheduling.Namespace != pod.Namespace {
 | 
						if podScheduling.Name != pod.Name || podScheduling.Namespace != pod.Namespace {
 | 
				
			||||||
		pl.logger.V(7).Info("PodSchedulingContext for unrelated pod got modified", "pod", klog.KObj(pod), "podScheduling", klog.KObj(podScheduling))
 | 
							logger.V(7).Info("PodSchedulingContext for unrelated pod got modified", "pod", klog.KObj(pod), "podScheduling", klog.KObj(podScheduling))
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -397,7 +386,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1
 | 
				
			|||||||
		// This is not an unexpected error: we know that
 | 
							// This is not an unexpected error: we know that
 | 
				
			||||||
		// foreachPodResourceClaim only returns errors for "not
 | 
							// foreachPodResourceClaim only returns errors for "not
 | 
				
			||||||
		// schedulable".
 | 
							// schedulable".
 | 
				
			||||||
		pl.logger.V(4).Info("pod is not schedulable, keep waiting", "pod", klog.KObj(pod), "reason", err.Error())
 | 
							logger.V(4).Info("pod is not schedulable, keep waiting", "pod", klog.KObj(pod), "reason", err.Error())
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -407,10 +396,10 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1
 | 
				
			|||||||
		// potential nodes list.  But pod scheduling attempts are
 | 
							// potential nodes list.  But pod scheduling attempts are
 | 
				
			||||||
		// expensive and doing them too often causes the pod to enter
 | 
							// expensive and doing them too often causes the pod to enter
 | 
				
			||||||
		// backoff. Let's wait instead for all drivers to reply.
 | 
							// backoff. Let's wait instead for all drivers to reply.
 | 
				
			||||||
		if loggerV := pl.logger.V(6); loggerV.Enabled() {
 | 
							if loggerV := logger.V(6); loggerV.Enabled() {
 | 
				
			||||||
			loggerV.Info("PodSchedulingContext with missing resource claim information, keep waiting", "pod", klog.KObj(pod), "podSchedulingDiff", cmp.Diff(oldPodScheduling, podScheduling))
 | 
								loggerV.Info("PodSchedulingContext with missing resource claim information, keep waiting", "pod", klog.KObj(pod), "podSchedulingDiff", cmp.Diff(oldPodScheduling, podScheduling))
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			pl.logger.V(5).Info("PodSchedulingContext with missing resource claim information, keep waiting", "pod", klog.KObj(pod))
 | 
								logger.V(5).Info("PodSchedulingContext with missing resource claim information, keep waiting", "pod", klog.KObj(pod))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -418,7 +407,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1
 | 
				
			|||||||
	if oldPodScheduling == nil /* create */ ||
 | 
						if oldPodScheduling == nil /* create */ ||
 | 
				
			||||||
		len(oldPodScheduling.Status.ResourceClaims) < len(podScheduling.Status.ResourceClaims) /* new information and not incomplete (checked above) */ {
 | 
							len(oldPodScheduling.Status.ResourceClaims) < len(podScheduling.Status.ResourceClaims) /* new information and not incomplete (checked above) */ {
 | 
				
			||||||
		// This definitely is new information for the scheduler. Try again immediately.
 | 
							// This definitely is new information for the scheduler. Try again immediately.
 | 
				
			||||||
		pl.logger.V(4).Info("PodSchedulingContext for pod has all required information, schedule immediately", "pod", klog.KObj(pod))
 | 
							logger.V(4).Info("PodSchedulingContext for pod has all required information, schedule immediately", "pod", klog.KObj(pod))
 | 
				
			||||||
		return framework.QueueImmediately
 | 
							return framework.QueueImmediately
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -443,7 +432,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1
 | 
				
			|||||||
	if podScheduling.Spec.SelectedNode != "" {
 | 
						if podScheduling.Spec.SelectedNode != "" {
 | 
				
			||||||
		for _, claimStatus := range podScheduling.Status.ResourceClaims {
 | 
							for _, claimStatus := range podScheduling.Status.ResourceClaims {
 | 
				
			||||||
			if sliceContains(claimStatus.UnsuitableNodes, podScheduling.Spec.SelectedNode) {
 | 
								if sliceContains(claimStatus.UnsuitableNodes, podScheduling.Spec.SelectedNode) {
 | 
				
			||||||
				pl.logger.V(5).Info("PodSchedulingContext has unsuitable selected node, schedule immediately", "pod", klog.KObj(pod), "selectedNode", podScheduling.Spec.SelectedNode, "podResourceName", claimStatus.Name)
 | 
									logger.V(5).Info("PodSchedulingContext has unsuitable selected node, schedule immediately", "pod", klog.KObj(pod), "selectedNode", podScheduling.Spec.SelectedNode, "podResourceName", claimStatus.Name)
 | 
				
			||||||
				return framework.QueueImmediately
 | 
									return framework.QueueImmediately
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -453,7 +442,7 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1
 | 
				
			|||||||
	if oldPodScheduling != nil &&
 | 
						if oldPodScheduling != nil &&
 | 
				
			||||||
		!apiequality.Semantic.DeepEqual(&oldPodScheduling.Spec, &podScheduling.Spec) &&
 | 
							!apiequality.Semantic.DeepEqual(&oldPodScheduling.Spec, &podScheduling.Spec) &&
 | 
				
			||||||
		apiequality.Semantic.DeepEqual(&oldPodScheduling.Status, &podScheduling.Status) {
 | 
							apiequality.Semantic.DeepEqual(&oldPodScheduling.Status, &podScheduling.Status) {
 | 
				
			||||||
		pl.logger.V(5).Info("PodSchedulingContext has only the scheduler spec changes, ignore the update", "pod", klog.KObj(pod))
 | 
							logger.V(5).Info("PodSchedulingContext has only the scheduler spec changes, ignore the update", "pod", klog.KObj(pod))
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -462,10 +451,10 @@ func (pl *dynamicResources) isSchedulableAfterPodSchedulingContextChange(pod *v1
 | 
				
			|||||||
	// to handle it and thus return QueueAfterBackoff. This will cause the
 | 
						// to handle it and thus return QueueAfterBackoff. This will cause the
 | 
				
			||||||
	// scheduler to treat the event as if no event hint callback had been provided.
 | 
						// scheduler to treat the event as if no event hint callback had been provided.
 | 
				
			||||||
	// Developers who want to investigate this can enable a diff at log level 6.
 | 
						// Developers who want to investigate this can enable a diff at log level 6.
 | 
				
			||||||
	if loggerV := pl.logger.V(6); loggerV.Enabled() {
 | 
						if loggerV := logger.V(6); loggerV.Enabled() {
 | 
				
			||||||
		loggerV.Info("PodSchedulingContext for pod with unknown changes, maybe schedule", "pod", klog.KObj(pod), "podSchedulingDiff", cmp.Diff(oldPodScheduling, podScheduling))
 | 
							loggerV.Info("PodSchedulingContext for pod with unknown changes, maybe schedule", "pod", klog.KObj(pod), "podSchedulingDiff", cmp.Diff(oldPodScheduling, podScheduling))
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		pl.logger.V(5).Info("PodSchedulingContext for pod with unknown changes, maybe schedule", "pod", klog.KObj(pod))
 | 
							logger.V(5).Info("PodSchedulingContext for pod with unknown changes, maybe schedule", "pod", klog.KObj(pod))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return framework.QueueAfterBackoff
 | 
						return framework.QueueAfterBackoff
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -762,7 +762,7 @@ func setup(t *testing.T, nodes []*v1.Node, claims []*resourcev1alpha2.ResourceCl
 | 
				
			|||||||
	t.Helper()
 | 
						t.Helper()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	tc := &testContext{}
 | 
						tc := &testContext{}
 | 
				
			||||||
	logger, ctx := ktesting.NewTestContext(t)
 | 
						_, ctx := ktesting.NewTestContext(t)
 | 
				
			||||||
	ctx, cancel := context.WithCancel(ctx)
 | 
						ctx, cancel := context.WithCancel(ctx)
 | 
				
			||||||
	t.Cleanup(cancel)
 | 
						t.Cleanup(cancel)
 | 
				
			||||||
	tc.ctx = ctx
 | 
						tc.ctx = ctx
 | 
				
			||||||
@@ -782,7 +782,7 @@ func setup(t *testing.T, nodes []*v1.Node, claims []*resourcev1alpha2.ResourceCl
 | 
				
			|||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	pl, err := NewWithLogger(logger, nil, fh, feature.Features{EnableDynamicResourceAllocation: true})
 | 
						pl, err := New(nil, fh, feature.Features{EnableDynamicResourceAllocation: true})
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -885,7 +885,7 @@ func createReactor(tracker cgotesting.ObjectTracker) func(action cgotesting.Acti
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestClaimChange(t *testing.T) {
 | 
					func Test_isSchedulableAfterClaimChange(t *testing.T) {
 | 
				
			||||||
	testcases := map[string]struct {
 | 
						testcases := map[string]struct {
 | 
				
			||||||
		pod            *v1.Pod
 | 
							pod            *v1.Pod
 | 
				
			||||||
		claims         []*resourcev1alpha2.ResourceClaim
 | 
							claims         []*resourcev1alpha2.ResourceClaim
 | 
				
			||||||
@@ -960,6 +960,7 @@ func TestClaimChange(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	for name, tc := range testcases {
 | 
						for name, tc := range testcases {
 | 
				
			||||||
		t.Run(name, func(t *testing.T) {
 | 
							t.Run(name, func(t *testing.T) {
 | 
				
			||||||
 | 
								logger, _ := ktesting.NewTestContext(t)
 | 
				
			||||||
			testCtx := setup(t, nil, tc.claims, nil, nil)
 | 
								testCtx := setup(t, nil, tc.claims, nil, nil)
 | 
				
			||||||
			if claim, ok := tc.newObj.(*resourcev1alpha2.ResourceClaim); ok {
 | 
								if claim, ok := tc.newObj.(*resourcev1alpha2.ResourceClaim); ok {
 | 
				
			||||||
				// Update the informer because the lister gets called and must have the claim.
 | 
									// Update the informer because the lister gets called and must have the claim.
 | 
				
			||||||
@@ -970,13 +971,13 @@ func TestClaimChange(t *testing.T) {
 | 
				
			|||||||
					require.NoError(t, store.Update(claim))
 | 
										require.NoError(t, store.Update(claim))
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			actualHint := testCtx.p.isSchedulableAfterClaimChange(tc.pod, tc.oldObj, tc.newObj)
 | 
								actualHint := testCtx.p.isSchedulableAfterClaimChange(logger, tc.pod, tc.oldObj, tc.newObj)
 | 
				
			||||||
			require.Equal(t, tc.expectedHint, actualHint)
 | 
								require.Equal(t, tc.expectedHint, actualHint)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestPodSchedulingContextChange(t *testing.T) {
 | 
					func Test_isSchedulableAfterPodSchedulingContextChange(t *testing.T) {
 | 
				
			||||||
	testcases := map[string]struct {
 | 
						testcases := map[string]struct {
 | 
				
			||||||
		pod            *v1.Pod
 | 
							pod            *v1.Pod
 | 
				
			||||||
		schedulings    []*resourcev1alpha2.PodSchedulingContext
 | 
							schedulings    []*resourcev1alpha2.PodSchedulingContext
 | 
				
			||||||
@@ -1090,8 +1091,9 @@ func TestPodSchedulingContextChange(t *testing.T) {
 | 
				
			|||||||
		tc := tc
 | 
							tc := tc
 | 
				
			||||||
		t.Run(name, func(t *testing.T) {
 | 
							t.Run(name, func(t *testing.T) {
 | 
				
			||||||
			t.Parallel()
 | 
								t.Parallel()
 | 
				
			||||||
 | 
								logger, _ := ktesting.NewTestContext(t)
 | 
				
			||||||
			testCtx := setup(t, nil, tc.claims, nil, tc.schedulings)
 | 
								testCtx := setup(t, nil, tc.claims, nil, tc.schedulings)
 | 
				
			||||||
			actualHint := testCtx.p.isSchedulableAfterPodSchedulingContextChange(tc.pod, tc.oldObj, tc.newObj)
 | 
								actualHint := testCtx.p.isSchedulableAfterPodSchedulingContextChange(logger, tc.pod, tc.oldObj, tc.newObj)
 | 
				
			||||||
			require.Equal(t, tc.expectedHint, actualHint)
 | 
								require.Equal(t, tc.expectedHint, actualHint)
 | 
				
			||||||
		})
 | 
							})
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -97,7 +97,7 @@ type ClusterEventWithHint struct {
 | 
				
			|||||||
//   - For example, the given event is "Node deleted", the `oldObj` will be that deleted Node.
 | 
					//   - For example, the given event is "Node deleted", the `oldObj` will be that deleted Node.
 | 
				
			||||||
//   - `oldObj` is nil if the event is add event.
 | 
					//   - `oldObj` is nil if the event is add event.
 | 
				
			||||||
//   - `newObj` is nil if the event is delete event.
 | 
					//   - `newObj` is nil if the event is delete event.
 | 
				
			||||||
type QueueingHintFn func(pod *v1.Pod, oldObj, newObj interface{}) QueueingHint
 | 
					type QueueingHintFn func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) QueueingHint
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type QueueingHint int
 | 
					type QueueingHint int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -389,7 +389,7 @@ func (p *PriorityQueue) isPodWorthRequeuing(logger klog.Logger, pInfo *framework
 | 
				
			|||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			switch h := hintfn.QueueingHintFn(pod, oldObj, newObj); h {
 | 
								switch h := hintfn.QueueingHintFn(logger, pod, oldObj, newObj); h {
 | 
				
			||||||
			case framework.QueueSkip:
 | 
								case framework.QueueSkip:
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			case framework.QueueImmediately:
 | 
								case framework.QueueImmediately:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -83,13 +83,13 @@ var (
 | 
				
			|||||||
		cmpopts.IgnoreFields(nominator{}, "podLister", "lock"),
 | 
							cmpopts.IgnoreFields(nominator{}, "podLister", "lock"),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	queueHintReturnQueueAfterBackoff = func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
						queueHintReturnQueueAfterBackoff = func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
		return framework.QueueAfterBackoff
 | 
							return framework.QueueAfterBackoff
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	queueHintReturnQueueImmediately = func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
						queueHintReturnQueueImmediately = func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
		return framework.QueueImmediately
 | 
							return framework.QueueImmediately
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	queueHintReturnQueueSkip = func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
						queueHintReturnQueueSkip = func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@@ -2364,15 +2364,15 @@ func mustNewPodInfo(pod *v1.Pod) *framework.PodInfo {
 | 
				
			|||||||
// Test_isPodWorthRequeuing tests isPodWorthRequeuing function.
 | 
					// Test_isPodWorthRequeuing tests isPodWorthRequeuing function.
 | 
				
			||||||
func Test_isPodWorthRequeuing(t *testing.T) {
 | 
					func Test_isPodWorthRequeuing(t *testing.T) {
 | 
				
			||||||
	count := 0
 | 
						count := 0
 | 
				
			||||||
	queueHintReturnQueueImmediately := func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
						queueHintReturnQueueImmediately := func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
		count++
 | 
							count++
 | 
				
			||||||
		return framework.QueueImmediately
 | 
							return framework.QueueImmediately
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	queueHintReturnQueueSkip := func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
						queueHintReturnQueueSkip := func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
		count++
 | 
							count++
 | 
				
			||||||
		return framework.QueueSkip
 | 
							return framework.QueueSkip
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	queueHintReturnQueueAfterBackoff := func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
						queueHintReturnQueueAfterBackoff := func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
		count++
 | 
							count++
 | 
				
			||||||
		return framework.QueueAfterBackoff
 | 
							return framework.QueueAfterBackoff
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -361,7 +361,7 @@ func New(ctx context.Context,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// defaultQueueingHintFn is the default queueing hint function.
 | 
					// defaultQueueingHintFn is the default queueing hint function.
 | 
				
			||||||
// It always returns QueueAfterBackoff as the queueing hint.
 | 
					// It always returns QueueAfterBackoff as the queueing hint.
 | 
				
			||||||
var defaultQueueingHintFn = func(_ *v1.Pod, _, _ interface{}) framework.QueueingHint {
 | 
					var defaultQueueingHintFn = func(_ klog.Logger, _ *v1.Pod, _, _ interface{}) framework.QueueingHint {
 | 
				
			||||||
	return framework.QueueAfterBackoff
 | 
						return framework.QueueAfterBackoff
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -764,6 +764,7 @@ func Test_buildQueueingHintMap(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) {
 | 
				
			||||||
 | 
								logger, _ := ktesting.NewTestContext(t)
 | 
				
			||||||
			registry := frameworkruntime.Registry{}
 | 
								registry := frameworkruntime.Registry{}
 | 
				
			||||||
			cfgPls := &schedulerapi.Plugins{}
 | 
								cfgPls := &schedulerapi.Plugins{}
 | 
				
			||||||
			plugins := append(tt.plugins, &fakebindPlugin{}, &fakeQueueSortPlugin{})
 | 
								plugins := append(tt.plugins, &fakebindPlugin{}, &fakeQueueSortPlugin{})
 | 
				
			||||||
@@ -808,8 +809,8 @@ func Test_buildQueueingHintMap(t *testing.T) {
 | 
				
			|||||||
						t.Errorf("got plugin name %v, want %v", fn.PluginName, wantfns[i].PluginName)
 | 
											t.Errorf("got plugin name %v, want %v", fn.PluginName, wantfns[i].PluginName)
 | 
				
			||||||
						continue
 | 
											continue
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					if fn.QueueingHintFn(nil, nil, nil) != wantfns[i].QueueingHintFn(nil, nil, nil) {
 | 
										if fn.QueueingHintFn(logger, nil, nil, nil) != wantfns[i].QueueingHintFn(logger, nil, nil, nil) {
 | 
				
			||||||
						t.Errorf("got queueing hint function (%v) returning %v, expect it to return %v", fn.PluginName, fn.QueueingHintFn(nil, nil, nil), wantfns[i].QueueingHintFn(nil, nil, nil))
 | 
											t.Errorf("got queueing hint function (%v) returning %v, expect it to return %v", fn.PluginName, fn.QueueingHintFn(logger, nil, nil, nil), wantfns[i].QueueingHintFn(logger, nil, nil, nil))
 | 
				
			||||||
						continue
 | 
											continue
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
@@ -1033,7 +1034,7 @@ var hintFromFakeNode = framework.QueueingHint(100)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type fakeNodePlugin struct{}
 | 
					type fakeNodePlugin struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fakeNodePluginQueueingFn = func(_ *v1.Pod, _, _ interface{}) framework.QueueingHint {
 | 
					var fakeNodePluginQueueingFn = func(_ klog.Logger, _ *v1.Pod, _, _ interface{}) framework.QueueingHint {
 | 
				
			||||||
	return hintFromFakeNode
 | 
						return hintFromFakeNode
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1053,7 +1054,7 @@ var hintFromFakePod = framework.QueueingHint(101)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
type fakePodPlugin struct{}
 | 
					type fakePodPlugin struct{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var fakePodPluginQueueingFn = func(_ *v1.Pod, _, _ interface{}) framework.QueueingHint {
 | 
					var fakePodPluginQueueingFn = func(_ klog.Logger, _ *v1.Pod, _, _ interface{}) framework.QueueingHint {
 | 
				
			||||||
	return hintFromFakePod
 | 
						return hintFromFakePod
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,6 +23,7 @@ import (
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	v1 "k8s.io/api/core/v1"
 | 
						v1 "k8s.io/api/core/v1"
 | 
				
			||||||
	"k8s.io/apimachinery/pkg/util/wait"
 | 
						"k8s.io/apimachinery/pkg/util/wait"
 | 
				
			||||||
 | 
						"k8s.io/klog/v2"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/scheduler"
 | 
						"k8s.io/kubernetes/pkg/scheduler"
 | 
				
			||||||
	"k8s.io/kubernetes/pkg/scheduler/framework"
 | 
						"k8s.io/kubernetes/pkg/scheduler/framework"
 | 
				
			||||||
	st "k8s.io/kubernetes/pkg/scheduler/testing"
 | 
						st "k8s.io/kubernetes/pkg/scheduler/testing"
 | 
				
			||||||
@@ -69,7 +70,7 @@ func (rp *ReservePlugin) EventsToRegister() []framework.ClusterEventWithHint {
 | 
				
			|||||||
	return []framework.ClusterEventWithHint{
 | 
						return []framework.ClusterEventWithHint{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add},
 | 
								Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add},
 | 
				
			||||||
			QueueingHintFn: func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
								QueueingHintFn: func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
				return framework.QueueImmediately
 | 
									return framework.QueueImmediately
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
@@ -106,7 +107,7 @@ func (pp *PermitPlugin) EventsToRegister() []framework.ClusterEventWithHint {
 | 
				
			|||||||
	return []framework.ClusterEventWithHint{
 | 
						return []framework.ClusterEventWithHint{
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add},
 | 
								Event: framework.ClusterEvent{Resource: framework.Node, ActionType: framework.Add},
 | 
				
			||||||
			QueueingHintFn: func(pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
								QueueingHintFn: func(logger klog.Logger, pod *v1.Pod, oldObj, newObj interface{}) framework.QueueingHint {
 | 
				
			||||||
				return framework.QueueImmediately
 | 
									return framework.QueueImmediately
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user