diff --git a/flame/main.cpp b/flame/main.cpp index 0848905..d9b0113 100644 --- a/flame/main.cpp +++ b/flame/main.cpp @@ -402,7 +402,7 @@ int main(int argc, char *argv[]) for (auto i = 0; i < c_count; i++) { std::shared_ptr rl; if (config->rate_limit()) { - rl = std::make_shared(config->rate_limit() / c_count); + rl = std::make_shared(config->rate_limit() / static_cast(c_count)); } else if (args["--qps-flow"]) { rl = std::make_shared(); rl_list.push_back(rl); @@ -494,7 +494,7 @@ int main(int argc, char *argv[]) std::cout << "query list randomized" << std::endl; } if (config->rate_limit()) { - std::cout << "rate limit @ " << config->rate_limit() << " QPS (" << (config->rate_limit() / c_count) << + std::cout << "rate limit @ " << config->rate_limit() << " QPS (" << config->rate_limit() / static_cast(c_count) << " QPS per concurrent sender)" << std::endl; } } diff --git a/flame/tokenbucket.h b/flame/tokenbucket.h index a7e49c0..a851e31 100644 --- a/flame/tokenbucket.h +++ b/flame/tokenbucket.h @@ -14,7 +14,7 @@ class TokenBucket { } - TokenBucket(const uint64_t rate) + TokenBucket(double rate) : _rate_qps(rate) , _token_wallet(0) , _last_fill_ms(0) @@ -28,7 +28,7 @@ class TokenBucket _last_fill_ms = now_ms; } else if (now_ms > _last_fill_ms) { auto elapsed_ms = (now_ms - _last_fill_ms).count(); - double add = (double)_rate_qps * ((double)elapsed_ms / 1000.0); + double add = _rate_qps * elapsed_ms / 1000.0; if (_token_wallet + add >= tokens) { _token_wallet += add; _last_fill_ms = now_ms; @@ -43,8 +43,8 @@ class TokenBucket } private: - uint64_t _rate_qps; - uint64_t _token_wallet; + double _rate_qps; + double _token_wallet; // milliseconds, based on uv_now() http://docs.libuv.org/en/v1.x/loop.html#c.uv_now uvw::Loop::Time _last_fill_ms; };