]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fix sched_time not actually randomized 9578/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Sat, 14 May 2016 03:28:04 +0000 (11:28 +0800)
committerAbhishek Varshney <abhishek.varshney@flipkart.com>
Wed, 8 Jun 2016 06:15:44 +0000 (11:45 +0530)
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>
(cherry picked from commit d3b7767a64af0cd57d17b888e4ec3bdae6fdab87)

src/osd/OSD.cc

index 6d01fe8d677311b5ecdbd2508f83e210171c58fe..ae9333d9e62c4b6e551f4c1d11b27f6e1fe2061a 100644 (file)
@@ -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;