]> git.apps.os.sepia.ceph.com Git - ceph-ci.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)
committerSage Weil <sage@redhat.com>
Sun, 14 Jan 2018 16:47:24 +0000 (10:47 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/legacy_config_opts.h
src/common/options.cc
src/osd/ECBackend.cc
src/osd/ReplicatedBackend.cc

index f2b8196ef8e2d98fc0f518bcea407ddd4b800945..2794084be52ef21ff72db2cd9cf95a70be800dba 100644 (file)
@@ -787,6 +787,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 b286457b9b35f18d44f1c8ad1dd6990ce05e4ab8..c700871fd776a35efa864d090ab87dddcd171c3b 100644 (file)
@@ -2889,6 +2889,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 47b4d799a89767665d4039d97b256750d53873e4..8901442aadb7f51ed1d90df22bd02790a5b995eb 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 be83c8d82e6710cb32c914acb36636e99deae2e0..3047b945f86680192e9e9373ec54c1f85ca506e3 100644 (file)
@@ -666,11 +666,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,