Skip to content

Commit

Permalink
Merge pull request kubernetes#46438 from wojtek-t/make_bound_frequenc…
Browse files Browse the repository at this point in the history
…y_runner_non_blocking

Automatic merge from submit-queue

Make BoundedFrequencyRunner Run() really non-blocking
  • Loading branch information
Kubernetes Submit Queue authored May 26, 2017
2 parents f006dcc + 46e9b52 commit 6b14216
Showing 1 changed file with 12 additions and 2 deletions.
14 changes: 12 additions & 2 deletions pkg/util/async/bounded_frequency_runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ func construct(name string, fn func(), minInterval, maxInterval time.Duration, b
fn: fn,
minInterval: minInterval,
maxInterval: maxInterval,
run: make(chan struct{}, 16),
run: make(chan struct{}, 1),
timer: timer,
}
if minInterval == 0 {
Expand Down Expand Up @@ -185,8 +185,18 @@ func (bfr *BoundedFrequencyRunner) Loop(stop <-chan struct{}) {

// Run the function as soon as possible. If this is called while Loop is not
// running, the call may be deferred indefinitely.
// If there is already a queued request to call the underlying function, it
// may be dropped - it is just guaranteed that we will try calling the
// underlying function as soon as possible starting from now.
func (bfr *BoundedFrequencyRunner) Run() {
bfr.run <- struct{}{}
// If it takes a lot of time to run the underlying function, noone is really
// processing elements from <run> channel. So to avoid blocking here on the
// putting element to it, we simply skip it if there is already an element
// in it.
select {
case bfr.run <- struct{}{}:
default:
}
}

// assumes the lock is not held
Expand Down

0 comments on commit 6b14216

Please sign in to comment.