From: xie xingguo Date: Sat, 14 May 2016 03:28:04 +0000 (+0800) Subject: osd: fix sched_time not actually randomized X-Git-Tag: v10.2.3~140^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=3f8642d134c473be331a53f420d122b4f390dee6;p=ceph.git osd: fix sched_time not actually randomized The test program: main() { for (int i = 0; i < 1000; i++) { double before = rand() / RAND_MAX; double after = rand() / (double)RAND_MAX; cout << "before: " << before << " after: " << after << endl; } } And the output(partial and with "-std=c++11" option): before: 0 after: 0.394383 before: 0 after: 0.79844 before: 0 after: 0.197551 before: 0 after: 0.76823 before: 0 after: 0.55397 before: 0 after: 0.628871 before: 0 after: 0.513401 before: 0 after: 0.916195 before: 0 after: 0.717297 before: 0 after: 0.606969 before: 0 after: 0.242887 before: 0 after: 0.804177 before: 0 after: 0.400944 before: 0 after: 0.108809 before: 0 after: 0.218257 before: 0 after: 0.839112 before: 0 after: 0.296032 before: 0 after: 0.524287 Fixes: http://tracker.ceph.com/issues/15890 Signed-off-by: xie xingguo (cherry picked from commit d3b7767a64af0cd57d17b888e4ec3bdae6fdab87) --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 6d01fe8d6773..ae9333d9e62c 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6343,7 +6343,7 @@ OSDService::ScrubJob::ScrubJob(const spg_t& pg, const utime_t& timestamp, pool_scrub_max_interval : g_conf->osd_scrub_max_interval; sched_time += scrub_min_interval; - double r = rand() / RAND_MAX; + double r = rand() / (double)RAND_MAX; sched_time += scrub_min_interval * g_conf->osd_scrub_interval_randomize_ratio * r; deadline += scrub_max_interval;