]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/*Backend: debug: inject sleep during deep scrub
authorSage Weil <sage@redhat.com>
Thu, 16 Nov 2017 14:58:01 +0000 (08:58 -0600)
committerDavid Zafman <dzafman@redhat.com>
Fri, 18 May 2018 16:37:56 +0000 (09:37 -0700)
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 3e66d88f308af2a9bd3410f7476af342acf48b91)

src/common/legacy_config_opts.h
src/common/options.cc
src/osd/ECBackend.cc
src/osd/ReplicatedBackend.cc

index 4bb51445ce492918f74411247843a4908e27aab9..1722d997a75e4dbe710c24657f811892cea383c5 100644 (file)
@@ -830,6 +830,7 @@ OPTION(osd_debug_misdirected_ops, OPT_BOOL)
 OPTION(osd_debug_skip_full_check_in_recovery, OPT_BOOL)
 OPTION(osd_debug_random_push_read_error, OPT_DOUBLE)
 OPTION(osd_debug_verify_cached_snaps, OPT_BOOL)
+OPTION(osd_debug_deep_scrub_sleep, OPT_FLOAT)
 OPTION(osd_enable_op_tracker, OPT_BOOL) // enable/disable OSD op tracking
 OPTION(osd_num_op_tracker_shard, OPT_U32) // The number of shards for holding the ops
 OPTION(osd_op_history_size, OPT_U32)    // Max number of completed ops to track
index e44e5600b65a9525ed2de0c7a98a5731bc7f698d..9e20be04b1351ef2350596532959496fcba1f7d9 100644 (file)
@@ -2770,6 +2770,9 @@ std::vector<Option> get_global_options() {
     .set_default(false)
     .set_description(""),
 
+    Option("osd_debug_deep_scrub_sleep", Option::TYPE_FLOAT, Option::LEVEL_DEV)
+    .set_default(0),
+
     Option("osd_enable_op_tracker", Option::TYPE_BOOL, Option::LEVEL_ADVANCED)
     .set_default(true)
     .set_description(""),
index 01dd2edd18037665f9c2aabb26263b39504e496e..0dd1991d895aafea0f0b07b565a9e68d530375bc 100644 (file)
@@ -2428,6 +2428,8 @@ void ECBackend::be_deep_scrub(
   uint64_t stride = cct->_conf->osd_deep_scrub_stride;
   if (stride % sinfo.get_chunk_size())
     stride += sinfo.get_chunk_size() - (stride % sinfo.get_chunk_size());
+  utime_t sleeptime;
+  sleeptime.set_from_double(cct->_conf->osd_debug_deep_scrub_sleep);
   uint64_t pos = 0;
   bool skip_data_digest = store->has_builtin_csum() &&
     g_conf->get_val<bool>("osd_skip_data_digest");
@@ -2436,6 +2438,10 @@ void ECBackend::be_deep_scrub(
                            CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
 
   while (true) {
+    if (sleeptime != utime_t()) {
+      lgeneric_derr(cct) << __func__ << " sleeping for " << sleeptime << dendl;
+      sleeptime.sleep();
+    }
     bufferlist bl;
     handle.reset_tp_timeout();
     r = store->read(
index e45bcac13e8556f2ce4da89a5aa53f9f791a0762..428dfa832a14aa03d8e9e25326f113998ee630d3 100644 (file)
@@ -718,11 +718,17 @@ void ReplicatedBackend::be_deep_scrub(
   __u64 pos = 0;
   bool skip_data_digest = store->has_builtin_csum() &&
     g_conf->get_val<bool>("osd_skip_data_digest");
+  utime_t sleeptime;
+  sleeptime.set_from_double(cct->_conf->osd_debug_deep_scrub_sleep);
 
   uint32_t fadvise_flags = CEPH_OSD_OP_FLAG_FADVISE_SEQUENTIAL |
                            CEPH_OSD_OP_FLAG_FADVISE_DONTNEED;
 
   while (true) {
+    if (sleeptime != utime_t()) {
+      lgeneric_derr(cct) << __func__ << " sleeping for " << sleeptime << dendl;
+      sleeptime.sleep();
+    }
     handle.reset_tp_timeout();
     r = store->read(
          ch,