aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-08-06 02:22:50 -0700
committerGravatar GitHub <noreply@github.com> 2017-08-06 02:22:50 -0700
commit964f04f4433772795fd76711020c5616bad5b915 (patch)
treedd39687058ad3f0ffc5b3362e643055c802c409b
parentc84df38ac59b0448e15cf85306e7ec10cd7ab155 (diff)
downloadcoredns-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.go14
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