From: Ronen Friedman Date: Tue, 29 Dec 2020 09:21:44 +0000 (+0200) Subject: osd: fixing the value_or configuration API X-Git-Tag: v16.1.0~14^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=24bdef378426ae0155d26ab6b8d66e04012ff37a;p=ceph.git osd: fixing the value_or configuration API My original value_or() was faulty: the wrong alternative (the T&& one) was chosen in some instances. Also: using this API in the scrubber code. (incorporating review comments by Reviewed-by: Samuel Just onto a previous version of this commit) Signed-off-by: Ronen Friedman --- diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index a9694f139043..2250f6f3b0ed 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -1109,20 +1109,11 @@ public: return true; } - template - T value_or(key_t key, const T& default_value) const { - auto i = opts.find(key); - if (i == opts.end()) { - return default_value; - } - return boost::get(i->second); - } - template T value_or(key_t key, T&& default_value) const { auto i = opts.find(key); if (i == opts.end()) { - return std::move(default_value); + return std::forward(default_value); } return boost::get(i->second); } diff --git a/src/osd/pg_scrubber.cc b/src/osd/pg_scrubber.cc index e2b4146c3fd8..578a2cf3407d 100644 --- a/src/osd/pg_scrubber.cc +++ b/src/osd/pg_scrubber.cc @@ -396,13 +396,12 @@ void PgScrubber::reg_next_scrub(const requested_scrub_t& request_flags) << " required:" << m_flags.required << " flags: " << request_flags << " stamp: " << reg_stamp << dendl; - // note down the sched_time, so we can locate this scrub, and remove it - // later on. - double scrub_min_interval = 0; - double scrub_max_interval = 0; - m_pg->pool.info.opts.get(pool_opts_t::SCRUB_MIN_INTERVAL, &scrub_min_interval); - m_pg->pool.info.opts.get(pool_opts_t::SCRUB_MAX_INTERVAL, &scrub_max_interval); + const double scrub_min_interval = + m_pg->pool.info.opts.value_or(pool_opts_t::SCRUB_MIN_INTERVAL, 0.0); + const double scrub_max_interval = + m_pg->pool.info.opts.value_or(pool_opts_t::SCRUB_MAX_INTERVAL, 0.0); + // note the sched_time, so we can locate this scrub, and remove it later m_scrub_reg_stamp = m_osds->reg_pg_scrub(m_pg->info.pgid, reg_stamp, scrub_min_interval, scrub_max_interval, must); dout(15) << __func__ << " pg(" << m_pg_id << ") register next scrub, scrub time "