mirror of
https://github.com/hashicorp/vault.git
synced 2025-11-28 06:01:08 +01:00
Remove data races around error/latency injector rand objects
This commit is contained in:
parent
d1be7165b0
commit
ab520a9119
@ -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")
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user