Commit 964f04f4 authored by Miek Gieben's avatar Miek Gieben Committed by GitHub

middleware/secondary: add jitter (#841)

randomize the times when doing transfers and checks.

Fixes #840
parent c84df38a
...@@ -2,6 +2,7 @@ package file ...@@ -2,6 +2,7 @@ package file
import ( import (
"log" "log"
"math/rand"
"time" "time"
"github.com/miekg/dns" "github.com/miekg/dns"
...@@ -146,6 +147,9 @@ Restart: ...@@ -146,6 +147,9 @@ Restart:
if !retryActive { if !retryActive {
break break
} }
time.Sleep(jitter(2000)) // 2s randomize
ok, err := z.shouldTransfer() ok, err := z.shouldTransfer()
if err != nil && ok { if err != nil && ok {
if err := z.TransferIn(); err != nil { if err := z.TransferIn(); err != nil {
...@@ -161,6 +165,9 @@ Restart: ...@@ -161,6 +165,9 @@ Restart:
} }
case <-refreshTicker.C: case <-refreshTicker.C:
time.Sleep(jitter(5000)) // 5s randomize
ok, err := z.shouldTransfer() ok, err := z.shouldTransfer()
retryActive = err != nil retryActive = err != nil
if err != nil && ok { if err != nil && ok {
...@@ -180,6 +187,13 @@ Restart: ...@@ -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 // 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. // two serials is greater than this number, the smaller one is considered greater.
const MaxSerialIncrement uint32 = 2147483647 const MaxSerialIncrement uint32 = 2147483647
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