Fixed setting unlimited rate in interactive console (#748)

* Fixed setting unlimited rate in interactive console

* Add changelog entry
This commit is contained in:
Joona Hoikkala 2023-10-22 17:34:24 +03:00 committed by GitHub
parent 0e024f4208
commit de9ac86677
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 7 deletions

View file

@ -3,6 +3,7 @@
- New
- Changed
- Fix a bug in autocalibration strategy merging, when two files have the same strategy key
- Fix panic when setting rate to 0 in the interactive console
- v2.1.0
- New

View file

@ -19,15 +19,13 @@ func NewRateThrottle(conf *Config) *RateThrottle {
Config: conf,
lastAdjustment: time.Now(),
}
if conf.Rate > 0 {
r.rateCounter = ring.New(int(conf.Rate * 5))
} else {
r.rateCounter = ring.New(conf.Threads * 5)
}
if conf.Rate > 0 {
ratemicros := 1000000 / conf.Rate
r.RateLimiter = time.NewTicker(time.Microsecond * time.Duration(ratemicros))
} else {
r.rateCounter = ring.New(conf.Threads * 5)
//Million rps is probably a decent hardcoded upper speedlimit
r.RateLimiter = time.NewTicker(time.Microsecond * 1)
}
@ -72,10 +70,17 @@ func (r *RateThrottle) ChangeRate(rate int) {
}
r.RateLimiter.Stop()
r.RateLimiter = time.NewTicker(time.Microsecond * time.Duration(ratemicros))
if rate > 0 {
r.RateLimiter = time.NewTicker(time.Microsecond * time.Duration(ratemicros))
// reset the rate counter
r.rateCounter = ring.New(rate * 5)
} else {
r.RateLimiter = time.NewTicker(time.Microsecond * 1)
// reset the rate counter
r.rateCounter = ring.New(r.Config.Threads * 5)
}
r.Config.Rate = int64(rate)
// reset the rate counter
r.rateCounter = ring.New(rate * 5)
}
// rateTick adds a new duration measurement tick to rate counter