]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix sched_time not actually randomized 9126/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Sat, 14 May 2016 03:28:04 +0000 (11:28 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Sun, 15 May 2016 23:02:50 +0000 (07:02 +0800)
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 <xie.xingguo@zte.com.cn>
src/osd/OSD.cc

index 0bfb0eab4c612eb2faa6c7e3246f01e03f05c50e..126488f0493655430bb1f8ca41ff6c5d4ddcc441 100644 (file)
@@ -6429,7 +6429,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;