Merge pull request #78632 from NickrenREN/delete-pod-if-add-succeeds

Delete the pods from unschedulable queue only when Add succeeds
This commit is contained in:
Kubernetes Prow Robot 2019-07-30 01:58:50 -07:00 committed by GitHub
commit 70bb26f96e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -519,19 +519,31 @@ func (p *PriorityQueue) AssignedPodUpdated(pod *v1.Pod) {
func (p *PriorityQueue) MoveAllToActiveQueue() { func (p *PriorityQueue) MoveAllToActiveQueue() {
p.lock.Lock() p.lock.Lock()
defer p.lock.Unlock() defer p.lock.Unlock()
// There is a chance of errors when adding pods to other queues,
// we make a temporary slice to store the pods,
// since the probability is low, we set its len to 0
addErrorPods := make([]*framework.PodInfo, 0)
for _, pInfo := range p.unschedulableQ.podInfoMap { for _, pInfo := range p.unschedulableQ.podInfoMap {
pod := pInfo.Pod pod := pInfo.Pod
if p.isPodBackingOff(pod) { if p.isPodBackingOff(pod) {
if err := p.podBackoffQ.Add(pInfo); err != nil { if err := p.podBackoffQ.Add(pInfo); err != nil {
klog.Errorf("Error adding pod %v to the backoff queue: %v", pod.Name, err) klog.Errorf("Error adding pod %v to the backoff queue: %v", pod.Name, err)
addErrorPods = append(addErrorPods, pInfo)
} }
} else { } else {
if err := p.activeQ.Add(pInfo); err != nil { if err := p.activeQ.Add(pInfo); err != nil {
klog.Errorf("Error adding pod %v to the scheduling queue: %v", pod.Name, err) klog.Errorf("Error adding pod %v to the scheduling queue: %v", pod.Name, err)
addErrorPods = append(addErrorPods, pInfo)
} }
} }
} }
p.unschedulableQ.clear() p.unschedulableQ.clear()
// Adding pods that we could not move to Active queue or Backoff queue back to the Unschedulable queue
for _, podInfo := range addErrorPods {
p.unschedulableQ.addOrUpdate(podInfo)
}
p.moveRequestCycle = p.schedulingCycle p.moveRequestCycle = p.schedulingCycle
p.cond.Broadcast() p.cond.Broadcast()
} }
@ -543,14 +555,17 @@ func (p *PriorityQueue) movePodsToActiveQueue(podInfoList []*framework.PodInfo)
if p.isPodBackingOff(pod) { if p.isPodBackingOff(pod) {
if err := p.podBackoffQ.Add(pInfo); err != nil { if err := p.podBackoffQ.Add(pInfo); err != nil {
klog.Errorf("Error adding pod %v to the backoff queue: %v", pod.Name, err) klog.Errorf("Error adding pod %v to the backoff queue: %v", pod.Name, err)
} else {
p.unschedulableQ.delete(pod)
} }
} else { } else {
if err := p.activeQ.Add(pInfo); err != nil { if err := p.activeQ.Add(pInfo); err != nil {
klog.Errorf("Error adding pod %v to the scheduling queue: %v", pod.Name, err) klog.Errorf("Error adding pod %v to the scheduling queue: %v", pod.Name, err)
} } else {
}
p.unschedulableQ.delete(pod) p.unschedulableQ.delete(pod)
} }
}
}
p.moveRequestCycle = p.schedulingCycle p.moveRequestCycle = p.schedulingCycle
p.cond.Broadcast() p.cond.Broadcast()
} }