mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-19 00:31:00 +00:00
Check the condition immediately in util.Wait funcs
Have poller() send to the channel once, immediately, before the ticker starts. This way, Poll, PollInfinite, and WaitFor will check the condition immediately, instead of waiting for the poller's interval to elapse once before doing the initial condition check.
This commit is contained in:
parent
ab07e320ec
commit
95041ab0ae
@ -44,8 +44,6 @@ type ConditionFunc func() (done bool, err error)
|
||||
// is reached. condition will always be invoked at least once but some intervals
|
||||
// may be missed if the condition takes too long or the time window is too short.
|
||||
// If you want to Poll something forever, see PollInfinite.
|
||||
// Poll always waits the interval before the first check of the condition.
|
||||
// TODO: create a separate PollImmediate function that does not wait.
|
||||
func Poll(interval, timeout time.Duration, condition ConditionFunc) error {
|
||||
return WaitFor(poller(interval, timeout), condition)
|
||||
}
|
||||
@ -90,7 +88,12 @@ func WaitFor(wait WaitFunc, c ConditionFunc) error {
|
||||
func poller(interval, timeout time.Duration) WaitFunc {
|
||||
return WaitFunc(func() <-chan struct{} {
|
||||
ch := make(chan struct{})
|
||||
|
||||
go func() {
|
||||
// send to the channel once immediately, rather than waiting for the first
|
||||
// interval to elapse
|
||||
ch <- struct{}{}
|
||||
|
||||
tick := time.NewTicker(interval)
|
||||
defer tick.Stop()
|
||||
var after <-chan time.Time
|
||||
|
@ -38,8 +38,8 @@ DRAIN:
|
||||
t.Errorf("unexpected timeout after poll")
|
||||
}
|
||||
}
|
||||
if count > 3 {
|
||||
t.Errorf("expected up to three values, got %d", count)
|
||||
if count < 2 {
|
||||
t.Errorf("expected at least two values, got %d", count)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user