Commit 8123a9ac authored by Shyam Jeedigunta's avatar Shyam Jeedigunta

Use random backoff for retries in cloud-cidr-allocator

parent ff46c0fe
...@@ -18,6 +18,7 @@ package ipam ...@@ -18,6 +18,7 @@ package ipam
import ( import (
"fmt" "fmt"
"math/rand"
"net" "net"
"sync" "sync"
"time" "time"
...@@ -211,9 +212,9 @@ func nodeUpdateRetryTimeout(count int) time.Duration { ...@@ -211,9 +212,9 @@ func nodeUpdateRetryTimeout(count int) time.Duration {
timeout *= 2 timeout *= 2
} }
if timeout > maxUpdateRetryTimeout { 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) { func (ca *cloudCIDRAllocator) removeNodeFromProcessing(nodeName string) {
......
...@@ -59,6 +59,10 @@ func TestBoundedRetries(t *testing.T) { ...@@ -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) { func TestNodeUpdateRetryTimeout(t *testing.T) {
for _, tc := range []struct { for _, tc := range []struct {
count int count int
...@@ -71,7 +75,7 @@ func TestNodeUpdateRetryTimeout(t *testing.T) { ...@@ -71,7 +75,7 @@ func TestNodeUpdateRetryTimeout(t *testing.T) {
{count: 50, want: 5000 * time.Millisecond}, {count: 50, want: 5000 * time.Millisecond},
} { } {
t.Run(fmt.Sprintf("count %d", tc.count), func(t *testing.T) { 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) t.Errorf("nodeUpdateRetryTimeout(tc.count) = %v; want %v", got, tc.want)
} }
}) })
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment