]> git.apps.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)
committerNathan Cutler <ncutler@suse.com>
Fri, 21 Aug 2020 15:48:33 +0000 (17:48 +0200)
Signed-off-by: Igor Fedotov <ifedotov@suse.com>
(cherry picked from commit 8d103b15c9b27e157d9b3e4bec87f1d71c94d547)

src/common/legacy_config_opts.h
src/common/options.cc
src/os/bluestore/BlueStore.cc

index a5dace943cd1fb6a42ddff473d6769c2c5ee9f40..dc1043a109809b38f3d0f5f878454becb0e2046a 100644 (file)
@@ -1071,6 +1071,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 af30d23f156921c4c1a7208107dd4d21374c2782..30958809edaeaec49fd3e424581484427e511f1c 100644 (file)
@@ -4877,6 +4877,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 c8a502a448a3b70b7bbe6508c12fe9b4574af54e..473085b7ad647cea4a86460f5ddbd6b3ea1023b5 100644 (file)
@@ -2483,6 +2483,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;
@@ -2539,6 +2542,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 {