Merge pull request #68135 from shyamjvs/add-random-backoff-to-cidr-allocator

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions here: https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md.

Use random backoff for retries in cloud-cidr-allocator

Ref https://github.com/kubernetes/kubernetes/pull/68084#issuecomment-417651247
/cc @wojtek-t 

```release-note
NONE
```
This commit is contained in:
Kubernetes Submit Queue 2018-09-03 18:41:40 -07:00 committed by GitHub
commit 06ffb07e8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 3 deletions

View File

@ -18,6 +18,7 @@ package ipam
import (
"fmt"
"math/rand"
"net"
"sync"
"time"
@ -211,9 +212,9 @@ func nodeUpdateRetryTimeout(count int) time.Duration {
timeout *= 2
}
if timeout > maxUpdateRetryTimeout {
return maxUpdateRetryTimeout
timeout = maxUpdateRetryTimeout
}
return timeout
return time.Duration(timeout.Nanoseconds()/2 + rand.Int63n(timeout.Nanoseconds()))
}
func (ca *cloudCIDRAllocator) removeNodeFromProcessing(nodeName string) {

View File

@ -59,6 +59,10 @@ func TestBoundedRetries(t *testing.T) {
}
}
func withinExpectedRange(got time.Duration, expected time.Duration) bool {
return got >= expected/2 && got <= 3*expected/2
}
func TestNodeUpdateRetryTimeout(t *testing.T) {
for _, tc := range []struct {
count int
@ -71,7 +75,7 @@ func TestNodeUpdateRetryTimeout(t *testing.T) {
{count: 50, want: 5000 * time.Millisecond},
} {
t.Run(fmt.Sprintf("count %d", tc.count), func(t *testing.T) {
if got := nodeUpdateRetryTimeout(tc.count); got != tc.want {
if got := nodeUpdateRetryTimeout(tc.count); !withinExpectedRange(got, tc.want) {
t.Errorf("nodeUpdateRetryTimeout(tc.count) = %v; want %v", got, tc.want)
}
})