mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 10:19:50 +00:00
scheduler: fix data race after binding failure
When binding has failed, `Done` gets called by `handleBindingCycleError`. Calling it again is at best redundant and worse, suffers from a data race: - the `assumedPodInfo` is placed in the backoff queue - an event causes the `Pod` pointer to get updated in it - reading `assumedPodInfo.Pod.UID` races with that write This race was found with`go test -race`.
This commit is contained in:
parent
99190634ab
commit
2f30fae0e8
@ -121,6 +121,7 @@ func (sched *Scheduler) scheduleOne(ctx context.Context) {
|
|||||||
status := sched.bindingCycle(bindingCycleCtx, state, fwk, scheduleResult, assumedPodInfo, start, podsToActivate)
|
status := sched.bindingCycle(bindingCycleCtx, state, fwk, scheduleResult, assumedPodInfo, start, podsToActivate)
|
||||||
if !status.IsSuccess() {
|
if !status.IsSuccess() {
|
||||||
sched.handleBindingCycleError(bindingCycleCtx, state, fwk, assumedPodInfo, start, scheduleResult, status)
|
sched.handleBindingCycleError(bindingCycleCtx, state, fwk, assumedPodInfo, start, scheduleResult, status)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
// Usually, DonePod is called inside the scheduling queue,
|
// Usually, DonePod is called inside the scheduling queue,
|
||||||
// but in this case, we need to call it here because this Pod won't go back to the scheduling queue.
|
// but in this case, we need to call it here because this Pod won't go back to the scheduling queue.
|
||||||
|
Loading…
Reference in New Issue
Block a user