]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Add config option to disable new scrubs during recovery 11874/head
authorWido den Hollander <wido@42on.com>
Wed, 9 Nov 2016 14:24:02 +0000 (15:24 +0100)
committerWido den Hollander <wido@42on.com>
Fri, 11 Nov 2016 10:53:50 +0000 (11:53 +0100)
The osd_scrub_during_recovery config option allows for configuring
if the OSD will schedule a new scrub while recovery is active.

When set to false no new scrubs will be initiated by the OSD while
there are recovery threads active on that OSD.

Signed-off-by: Wido den Hollander <wido@42on.com>
src/common/config_opts.h
src/osd/OSD.cc
src/osd/OSD.h

index 169625242627beca9d4756ff99300e18bf15126d..cb86b1501559ef09b1568755084d5e0199e78ed0 100644 (file)
@@ -771,6 +771,7 @@ OPTION(osd_max_push_cost, OPT_U64, 8<<20)  // max size of push message
 OPTION(osd_max_push_objects, OPT_U64, 10)  // max objects in single push op
 OPTION(osd_recovery_forget_lost_objects, OPT_BOOL, false)   // off for now
 OPTION(osd_max_scrubs, OPT_INT, 1)
+OPTION(osd_scrub_during_recovery, OPT_BOOL, true) // Allow new scrubs to start while recovery is active on the OSD
 OPTION(osd_scrub_begin_hour, OPT_INT, 0)
 OPTION(osd_scrub_end_hour, OPT_INT, 24)
 OPTION(osd_scrub_load_threshold, OPT_FLOAT, 0.5)
index 3f01634a7c0d6d0786374093f90abd5e74561947..6c939f9cf0634410d4837a35babdd5e083f54493 100644 (file)
@@ -6576,6 +6576,11 @@ void OSD::sched_scrub()
        break;
       }
 
+      if (!cct->_conf->osd_scrub_during_recovery && service.is_recovery_active()) {
+        dout(10) << __func__ << "not scheduling scrub of " << scrub.pgid << " due to active recovery ops" << dendl;
+        break;
+      }
+
       PG *pg = _lookup_lock_pg(scrub.pgid);
       if (!pg)
        continue;
@@ -8552,6 +8557,14 @@ void OSDService::finish_recovery_op(PG *pg, const hobject_t& soid, bool dequeue)
   _maybe_queue_recovery();
 }
 
+bool OSDService::is_recovery_active()
+{
+  if (recovery_ops_active > 0)
+    return true;
+
+  return false;
+}
+
 // =========================================================
 // OPS
 
index a08a34f45462363d9653305a6bc2da592d7b0f63..a79aa161b88c0ab17d77d242a01092ed508eeac0 100644 (file)
@@ -944,6 +944,7 @@ private:
 public:
   void start_recovery_op(PG *pg, const hobject_t& soid);
   void finish_recovery_op(PG *pg, const hobject_t& soid, bool dequeue);
+  bool is_recovery_active();
   void release_reserved_pushes(uint64_t pushes) {
     Mutex::Locker l(recovery_lock);
     assert(recovery_ops_reserved >= pushes);