]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: dump onode if too many spanning blobs detected.
authorIgor Fedotov <ifedotov@suse.com>
Wed, 1 May 2019 13:49:37 +0000 (16:49 +0300)
committerIgor Fedotov <ifedotov@suse.com>
Thu, 9 May 2019 11:05:24 +0000 (14:05 +0300)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
src/common/legacy_config_opts.h
src/common/options.cc
src/os/bluestore/BlueStore.cc

index d6bb8b2f36d27ce5aeab7c67df8921b1fb5ae560..74ab62d34ae104b508ee1d178f42756d55e2e583 100644 (file)
@@ -1043,6 +1043,7 @@ OPTION(bluestore_default_buffered_write, OPT_BOOL)
 OPTION(bluestore_debug_misc, OPT_BOOL)
 OPTION(bluestore_debug_no_reuse_blocks, OPT_BOOL)
 OPTION(bluestore_debug_small_allocations, OPT_INT)
+OPTION(bluestore_debug_too_many_blobs_threshold, OPT_INT)
 OPTION(bluestore_debug_freelist, OPT_BOOL)
 OPTION(bluestore_debug_prefill, OPT_FLOAT)
 OPTION(bluestore_debug_prefragment_max, OPT_INT)
index 7e7c7ae9a0030cb071e756ff69a45f0623a0b451..e5b6bc3e2d4b5c3de2e0a2b409521adee882cfcb 100644 (file)
@@ -4707,6 +4707,10 @@ std::vector<Option> get_global_options() {
     .set_default(0)
     .set_description(""),
 
+    Option("bluestore_debug_too_many_blobs_threshold", Option::TYPE_INT, Option::LEVEL_DEV)
+    .set_default(24*1024)
+    .set_description(""),
+
     Option("bluestore_debug_freelist", Option::TYPE_BOOL, Option::LEVEL_DEV)
     .set_default(false)
     .set_description(""),
index b623eeb4cc88b6e7fe1c3fcf06003beedc908b30..962d1db5780bb54dff88589b32f9602415aa8efa 100644 (file)
@@ -2541,6 +2541,9 @@ void BlueStore::ExtentMap::reshard(
       shard_end = sp->offset;
     }
     Extent dummy(needs_reshard_begin);
+    bool was_too_many_dump = false;
+    auto too_many_blobs_threshold =
+      g_conf()->bluestore_debug_too_many_blobs_threshold;
     for (auto e = extent_map.lower_bound(dummy); e != extent_map.end(); ++e) {
       if (e->logical_offset >= needs_reshard_end) {
        break;
@@ -2597,6 +2600,16 @@ void BlueStore::ExtentMap::reshard(
             b->id = bid;
            spanning_blob_map[b->id] = b;
            dout(20) << __func__ << "    adding spanning " << *b << dendl;
+           if (!was_too_many_dump &&
+             too_many_blobs_threshold &&
+             spanning_blob_map.size() >= size_t(too_many_blobs_threshold)) {
+               dout(0) << __func__
+                       << " spanning blob count exceeds threshold, "
+                       << spanning_blob_map.size() << " spanning blobs"
+                       << dendl;
+               _dump_onode<0>(cct, *onode);
+             was_too_many_dump = true;
+           }
          }
        }
       } else {