Fix flaky test TestBindPlugin
This commit is contained in:
@@ -201,7 +201,9 @@ type BindPlugin interface {
|
||||
// Bind plugins will not be called until all pre-bind plugins have completed. Each
|
||||
// bind plugin is called in the configured order. A bind plugin may choose whether
|
||||
// or not to handle the given Pod. If a bind plugin chooses to handle a Pod, the
|
||||
// remaining bind plugins are skipped.
|
||||
// remaining bind plugins are skipped. When a bind plugin does not handle a pod,
|
||||
// it must return Skip in its Status code. If a bind plugin returns an Error, the
|
||||
// pod is rejected and will not be bound.
|
||||
Bind(pc *PluginContext, p *v1.Pod, nodeName string) *Status
|
||||
}
|
||||
|
||||
|
||||
@@ -419,20 +419,21 @@ func (sched *Scheduler) bind(assumed *v1.Pod, targetNode string, pluginContext *
|
||||
bindingStart := time.Now()
|
||||
bindStatus := sched.config.Framework.RunBindPlugins(pluginContext, assumed, targetNode)
|
||||
var err error
|
||||
if bindStatus != nil && bindStatus.Code() == framework.Skip {
|
||||
// All bind plugins chooses to skip binding of this pod, call original binding func.
|
||||
|
||||
// If binding succeeded then PodScheduled condition will be updated in apiserver so that
|
||||
// it's atomic with setting host.
|
||||
err = sched.config.GetBinder(assumed).Bind(&v1.Binding{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: assumed.Namespace, Name: assumed.Name, UID: assumed.UID},
|
||||
Target: v1.ObjectReference{
|
||||
Kind: "Node",
|
||||
Name: targetNode,
|
||||
},
|
||||
})
|
||||
} else if !bindStatus.IsSuccess() {
|
||||
err = fmt.Errorf("scheduler RunBindPlugins failed for pod %v/%v: code %d, err %v", assumed.Namespace, assumed.Name, bindStatus.Code(), err)
|
||||
if !bindStatus.IsSuccess() {
|
||||
if bindStatus.Code() == framework.Skip {
|
||||
// All bind plugins chose to skip binding of this pod, call original binding function.
|
||||
// If binding succeeds then PodScheduled condition will be updated in apiserver so that
|
||||
// it's atomic with setting host.
|
||||
err = sched.config.GetBinder(assumed).Bind(&v1.Binding{
|
||||
ObjectMeta: metav1.ObjectMeta{Namespace: assumed.Namespace, Name: assumed.Name, UID: assumed.UID},
|
||||
Target: v1.ObjectReference{
|
||||
Kind: "Node",
|
||||
Name: targetNode,
|
||||
},
|
||||
})
|
||||
} else {
|
||||
err = fmt.Errorf("Bind failure, code: %d: %v", bindStatus.Code(), bindStatus.Message())
|
||||
}
|
||||
}
|
||||
if finErr := sched.config.SchedulerCache.FinishBinding(assumed); finErr != nil {
|
||||
klog.Errorf("scheduler cache FinishBinding failed: %v", finErr)
|
||||
|
||||
Reference in New Issue
Block a user