]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: fixing the value_or configuration API
authorRonen Friedman <rfriedma@redhat.com>
Tue, 29 Dec 2020 09:21:44 +0000 (11:21 +0200)
committerRonen Friedman <rfriedma@redhat.com>
Wed, 13 Jan 2021 13:27:07 +0000 (15:27 +0200)
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 <sjust@redhat.com>
onto a previous version of this commit)

Signed-off-by: Ronen Friedman <rfriedma@redhat.com>
src/osd/osd_types.h
src/osd/pg_scrubber.cc

index a9694f1390439e41511d344c9b96d95aa5b6b1bb..2250f6f3b0ed764da8b1d81c702ea7288b6c8363 100644 (file)
@@ -1109,20 +1109,11 @@ public:
     return true;
   }
 
-  template<typename T>
-  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<T>(i->second);
-  }
-
   template<typename T>
   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<T>(default_value);
     }
     return boost::get<T>(i->second);
   }
index e2b4146c3fd8663f1df19110f59d5d0a580a76dd..578a2cf3407da2297e2a626d3c1d26abe0f7d923 100644 (file)
@@ -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 "