diff options
author | 2017-08-06 02:22:50 -0700 | |
---|---|---|
committer | 2017-08-06 02:22:50 -0700 | |
commit | 964f04f4433772795fd76711020c5616bad5b915 (patch) | |
tree | dd39687058ad3f0ffc5b3362e643055c802c409b | |
parent | c84df38ac59b0448e15cf85306e7ec10cd7ab155 (diff) | |
download | coredns-964f04f4433772795fd76711020c5616bad5b915.tar.gz coredns-964f04f4433772795fd76711020c5616bad5b915.tar.zst coredns-964f04f4433772795fd76711020c5616bad5b915.zip |
middleware/secondary: add jitter (#841)
randomize the times when doing transfers and checks.
Fixes #840
-rw-r--r-- | middleware/file/secondary.go | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/middleware/file/secondary.go b/middleware/file/secondary.go index e371600e9..a37d62442 100644 --- a/middleware/file/secondary.go +++ b/middleware/file/secondary.go @@ -2,6 +2,7 @@ package file import ( "log" + "math/rand" "time" "github.com/miekg/dns" @@ -146,6 +147,9 @@ Restart: if !retryActive { break } + + time.Sleep(jitter(2000)) // 2s randomize + ok, err := z.shouldTransfer() if err != nil && ok { if err := z.TransferIn(); err != nil { @@ -161,6 +165,9 @@ Restart: } case <-refreshTicker.C: + + time.Sleep(jitter(5000)) // 5s randomize + ok, err := z.shouldTransfer() retryActive = err != nil if err != nil && ok { @@ -180,6 +187,13 @@ Restart: } } +// jitter returns a random duration between [0,n) * time.Millisecond +func jitter(n int) time.Duration { + r := rand.Intn(n) + return time.Duration(r) * time.Millisecond + +} + // MaxSerialIncrement is the maximum difference between two serial numbers. If the difference between // two serials is greater than this number, the smaller one is considered greater. const MaxSerialIncrement uint32 = 2147483647 |