Commit fa7945b1 authored by Jeff Liang's avatar Jeff Liang Committed by Facebook GitHub Bot

Fix int overflow when using PoissonDistribution with FunctionScheduler

Summary: Using the FunctionScheduler with PoissonDistribution will not work if we supply an interval of 36min+. This is around 2^31 so looks like it's hitting some integer limit. Also, there is no failure message and the behavior is that the function scheduler just never executes the function even for the first time after startup interval. Fixing this by using the proper type in the disribution.

Reviewed By: yfeldblum

Differential Revision: D24505727

fbshipit-source-id: ad050cf82bcf5a39383ffc601b52ad05d3d54f44
parent 26582c2b
......@@ -69,7 +69,7 @@ struct ConstIntervalFunctor {
struct PoissonDistributionFunctor {
std::default_random_engine generator;
std::poisson_distribution<int> poissonRandom;
std::poisson_distribution<microseconds::rep> poissonRandom;
explicit PoissonDistributionFunctor(microseconds meanPoissonUsec)
: poissonRandom(meanPoissonUsec.count()) {
......
......@@ -567,6 +567,21 @@ TEST(FunctionScheduler, GammaIntervalDistribution) {
EXPECT_EQ(6, total);
}
TEST(FunctionScheduler, PoissonDistribution) {
auto interval = std::chrono::hours(24 * 365 * 10);
atomic<int> total{0};
FunctionScheduler fs;
fs.addFunction(
[&] { total += 2; },
interval,
folly::FunctionScheduler::LatencyDistribution(true, interval),
"PoissonDistribution",
std::chrono::milliseconds(0));
fs.start();
delay(1);
EXPECT_EQ(2, total);
}
TEST(FunctionScheduler, AddWithRunOnce) {
atomic<int> total{0};
FunctionScheduler fs;
......
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