diff --git a/sdk/physical/error.go b/sdk/physical/error.go index d4c6f80e11..8091f178bc 100644 --- a/sdk/physical/error.go +++ b/sdk/physical/error.go @@ -4,6 +4,7 @@ import ( "context" "errors" "math/rand" + "sync" "time" log "github.com/hashicorp/go-hclog" @@ -18,6 +19,7 @@ const ( type ErrorInjector struct { backend Backend errorPercent int + randomLock *sync.Mutex random *rand.Rand } @@ -42,6 +44,7 @@ func NewErrorInjector(b Backend, errorPercent int, logger log.Logger) *ErrorInje return &ErrorInjector{ backend: b, errorPercent: errorPercent, + randomLock: new(sync.Mutex), random: rand.New(rand.NewSource(int64(time.Now().Nanosecond()))), } } @@ -59,7 +62,9 @@ func (e *ErrorInjector) SetErrorPercentage(p int) { } func (e *ErrorInjector) addError() error { + e.randomLock.Lock() roll := e.random.Intn(100) + e.randomLock.Unlock() if roll < e.errorPercent { return errors.New("random error") } diff --git a/sdk/physical/latency.go b/sdk/physical/latency.go index 9304922049..51bb560c2f 100644 --- a/sdk/physical/latency.go +++ b/sdk/physical/latency.go @@ -3,6 +3,7 @@ package physical import ( "context" "math/rand" + "sync" "time" log "github.com/hashicorp/go-hclog" @@ -19,6 +20,7 @@ type LatencyInjector struct { backend Backend latency time.Duration jitterPercent int + randomLock *sync.Mutex random *rand.Rand } @@ -45,6 +47,7 @@ func NewLatencyInjector(b Backend, latency time.Duration, jitter int, logger log backend: b, latency: latency, jitterPercent: jitter, + randomLock: new(sync.Mutex), random: rand.New(rand.NewSource(int64(time.Now().Nanosecond()))), } } @@ -68,7 +71,9 @@ func (l *LatencyInjector) addLatency() { if l.jitterPercent > 0 { min := 100 - l.jitterPercent max := 100 + l.jitterPercent + l.randomLock.Lock() percent = l.random.Intn(max-min) + min + l.randomLock.Unlock() } latencyDuration := time.Duration(int(l.latency) * percent / 100) time.Sleep(latencyDuration)