bool OSD::scrub_random_backoff()
{
- bool coin_flip = (rand() / (double)RAND_MAX >=
- cct->_conf->osd_scrub_backoff_ratio);
- if (!coin_flip) {
- dout(20) << "scrub_random_backoff lost coin flip, randomly backing off (ratio: "
- << cct->_conf->osd_scrub_backoff_ratio << ")" << dendl;
- return true;
+ if (random_bool_with_probability(cct->_conf->osd_scrub_backoff_ratio)) {
+ dout(20)
+ << "scrub_random_backoff lost coin flip, randomly backing off (ratio: "
+ << cct->_conf->osd_scrub_backoff_ratio << ")" << dendl;
+ return true; // backing off
}
return false;
}
ScrubberPasskey& operator=(const ScrubberPasskey&) = delete;
};
+/// randomly returns true with probability equal to the passed parameter
+static inline bool random_bool_with_probability(double probability) {
+ return (ceph::util::generate_random_number<double>(0.0, 1.0) < probability);
+}
+
namespace Scrub {
/// high/low OP priority