From 70640aaa12540057df9ac86d4336cdce81f10f07 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Wed, 1 May 2019 16:47:20 +0300 Subject: [PATCH] os/bluestore: move _dump_xxx methods out of BlueStore class Signed-off-by: Igor Fedotov --- src/os/bluestore/BlueStore.cc | 166 +++++++++++++++++----------------- src/os/bluestore/BlueStore.h | 9 +- 2 files changed, 89 insertions(+), 86 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index a558677f682..269b10639ce 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -585,6 +585,74 @@ static int get_key_pool_stat(const string& key, uint64_t* pool_id) return 0; } +template +void _dump_extent_map(CephContext *cct, const BlueStore::ExtentMap &em) +{ + uint64_t pos = 0; + for (auto& s : em.shards) { + dout(LogLevelV) << __func__ << " shard " << *s.shard_info + << (s.loaded ? " (loaded)" : "") + << (s.dirty ? " (dirty)" : "") + << dendl; + } + for (auto& e : em.extent_map) { + dout(LogLevelV) << __func__ << " " << e << dendl; + ceph_assert(e.logical_offset >= pos); + pos = e.logical_offset + e.length; + const bluestore_blob_t& blob = e.blob->get_blob(); + if (blob.has_csum()) { + vector v; + unsigned n = blob.get_csum_count(); + for (unsigned i = 0; i < n; ++i) + v.push_back(blob.get_csum_item(i)); + dout(LogLevelV) << __func__ << " csum: " << std::hex << v << std::dec + << dendl; + } + std::lock_guard l(e.blob->shared_blob->get_cache()->lock); + for (auto& i : e.blob->shared_blob->bc.buffer_map) { + dout(LogLevelV) << __func__ << " 0x" << std::hex << i.first + << "~" << i.second->length << std::dec + << " " << *i.second << dendl; + } + } +} + +template +void _dump_onode(CephContext *cct, const BlueStore::Onode& o) +{ + if (!cct->_conf->subsys.should_gather()) + return; + dout(LogLevelV) << __func__ << " " << &o << " " << o.oid + << " nid " << o.onode.nid + << " size 0x" << std::hex << o.onode.size + << " (" << std::dec << o.onode.size << ")" + << " expected_object_size " << o.onode.expected_object_size + << " expected_write_size " << o.onode.expected_write_size + << " in " << o.onode.extent_map_shards.size() << " shards" + << ", " << o.extent_map.spanning_blob_map.size() + << " spanning blobs" + << dendl; + for (auto p = o.onode.attrs.begin(); + p != o.onode.attrs.end(); + ++p) { + dout(LogLevelV) << __func__ << " attr " << p->first + << " len " << p->second.length() << dendl; + } + _dump_extent_map(cct, o.extent_map); +} + +template +void _dump_transaction(CephContext *cct, ObjectStore::Transaction *t) +{ + dout(LogLevelV) << __func__ << " transaction dump:\n"; + JSONFormatter f(true); + f.open_object_section("transaction"); + t->dump(&f); + f.close_section(); + f.flush(*_dout); + *_dout << dendl; +} + // merge operators struct Int64ArrayMergeOperator : public KeyValueDB::MergeOperator { @@ -7082,7 +7150,7 @@ int BlueStore::_fsck(bool deep, bool repair) ++num_objects; num_spanning_blobs += o->extent_map.spanning_blob_map.size(); o->extent_map.fault_range(db, 0, OBJECT_MAX_SIZE); - _dump_onode(o); + _dump_onode<30>(cct, *o); // shards if (!o->extent_map.shards.empty()) { ++num_sharded_objects; @@ -7436,7 +7504,7 @@ int BlueStore::_fsck(bool deep, bool repair) if (misref_extents.intersects(e.offset, e.length)) { if (first_dump) { first_dump = false; - _dump_onode<10>(o); + _dump_onode<10>(cct, *o); } broken_blob = true; break; @@ -8435,7 +8503,7 @@ int BlueStore::_do_read( auto start = mono_clock::now(); o->extent_map.fault_range(db, offset, length); LOG_LATENCY(logger, cct, l_bluestore_read_onode_meta_lat, mono_clock::now() - start); - _dump_onode(o); + _dump_onode<30>(cct, *o); ready_regions_t ready_regions; @@ -8836,7 +8904,7 @@ int BlueStore::_fiemap( if (!o || !o->exists) { return -ENOENT; } - _dump_onode(o); + _dump_onode<30>(cct, *o); dout(20) << __func__ << " 0x" << std::hex << offset << "~" << length << " size 0x" << o->onode.size << std::dec << dendl; @@ -8942,7 +9010,7 @@ int BlueStore::dump_onode(CollectionHandle &c_, // o->extent_map.fault_range(db, 0, OBJECT_MAX_SIZE); - _dump_onode<0>(o); + _dump_onode<0>(cct, *o); f->open_object_section(section_name.c_str()); o->dump(f); f->close_section(); @@ -10941,7 +11009,7 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t) { Transaction::iterator i = t->begin(); - _dump_transaction(t); + _dump_transaction<30>(cct, t); vector cvec(i.colls.size()); unsigned j = 0; @@ -11054,7 +11122,7 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t) derr << __func__ << " error " << cpp_strerror(r) << " not handled on operation " << op->op << " (op " << pos << ", counting from 0)" << dendl; - _dump_transaction<0>(t); + _dump_transaction<0>(cct, t); ceph_abort_msg("unexpected error"); } @@ -11298,7 +11366,7 @@ void BlueStore::_txc_add_transaction(TransContext *txc, Transaction *t) << " (op " << pos << ", counting from 0)" << dendl; derr << msg << dendl; - _dump_transaction<0>(t); + _dump_transaction<0>(cct, t); ceph_abort_msg("unexpected error"); } } @@ -11322,74 +11390,6 @@ int BlueStore::_touch(TransContext *txc, return r; } -template -void BlueStore::_dump_onode(const OnodeRef& o) -{ - if (!cct->_conf->subsys.should_gather()) - return; - dout(LogLevelV) << __func__ << " " << o << " " << o->oid - << " nid " << o->onode.nid - << " size 0x" << std::hex << o->onode.size - << " (" << std::dec << o->onode.size << ")" - << " expected_object_size " << o->onode.expected_object_size - << " expected_write_size " << o->onode.expected_write_size - << " in " << o->onode.extent_map_shards.size() << " shards" - << ", " << o->extent_map.spanning_blob_map.size() - << " spanning blobs" - << dendl; - for (auto p = o->onode.attrs.begin(); - p != o->onode.attrs.end(); - ++p) { - dout(LogLevelV) << __func__ << " attr " << p->first - << " len " << p->second.length() << dendl; - } - _dump_extent_map(o->extent_map); -} - -template -void BlueStore::_dump_extent_map(ExtentMap &em) -{ - uint64_t pos = 0; - for (auto& s : em.shards) { - dout(LogLevelV) << __func__ << " shard " << *s.shard_info - << (s.loaded ? " (loaded)" : "") - << (s.dirty ? " (dirty)" : "") - << dendl; - } - for (auto& e : em.extent_map) { - dout(LogLevelV) << __func__ << " " << e << dendl; - ceph_assert(e.logical_offset >= pos); - pos = e.logical_offset + e.length; - const bluestore_blob_t& blob = e.blob->get_blob(); - if (blob.has_csum()) { - vector v; - unsigned n = blob.get_csum_count(); - for (unsigned i = 0; i < n; ++i) - v.push_back(blob.get_csum_item(i)); - dout(LogLevelV) << __func__ << " csum: " << std::hex << v << std::dec - << dendl; - } - std::lock_guard l(e.blob->shared_blob->get_cache()->lock); - for (auto& i : e.blob->shared_blob->bc.buffer_map) { - dout(LogLevelV) << __func__ << " 0x" << std::hex << i.first - << "~" << i.second->length << std::dec - << " " << *i.second << dendl; - } - } -} - -template -void BlueStore::_dump_transaction(Transaction *t) -{ - dout(LogLevelV) << __func__ << " transaction dump:\n"; - JSONFormatter f(true); - f.open_object_section("transaction"); - t->dump(&f); - f.close_section(); - f.flush(*_dout); - *_dout << dendl; -} - void BlueStore::_pad_zeros( bufferlist *bl, uint64_t *offset, uint64_t chunk_size) @@ -12441,7 +12441,7 @@ int BlueStore::_do_write( << " bytes" << " fadvise_flags 0x" << std::hex << fadvise_flags << std::dec << dendl; - _dump_onode(o); + _dump_onode<30>(cct, *o); if (length == 0) { return 0; @@ -12558,7 +12558,7 @@ int BlueStore::_do_zero(TransContext *txc, << dendl; int r = 0; - _dump_onode(o); + _dump_onode<30>(cct, *o); WriteContext wctx; o->extent_map.fault_range(db, offset, length); @@ -12586,7 +12586,7 @@ void BlueStore::_do_truncate( dout(15) << __func__ << " " << c->cid << " " << o->oid << " 0x" << std::hex << offset << std::dec << dendl; - _dump_onode(o); + _dump_onode<30>(cct, *o); if (offset == o->onode.size) return; @@ -13130,12 +13130,12 @@ int BlueStore::_do_clone_range( << " 0x" << dstoff << "~" << length << std::dec << dendl; oldo->extent_map.fault_range(db, srcoff, length); newo->extent_map.fault_range(db, dstoff, length); - _dump_onode(oldo); - _dump_onode(newo); + _dump_onode<30>(cct, *oldo); + _dump_onode<30>(cct, *newo); oldo->extent_map.dup(this, txc, c, oldo, newo, srcoff, length, dstoff); - _dump_onode(oldo); - _dump_onode(newo); + _dump_onode<30>(cct, *oldo); + _dump_onode<30>(cct, *newo); return 0; } diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 60690973961..b74a873cd52 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2259,9 +2259,12 @@ private: void _assign_nid(TransContext *txc, OnodeRef o); uint64_t _assign_blobid(TransContext *txc); - template void _dump_onode(const OnodeRef& o); - template void _dump_extent_map(ExtentMap& em); - template void _dump_transaction(Transaction *t); + template + friend void _dump_onode(CephContext *cct, const Onode& o); + template + friend void _dump_extent_map(CephContext *cct, const ExtentMap& em); + template + friend void _dump_transaction(CephContext *cct, Transaction *t); TransContext *_txc_create(Collection *c, OpSequencer *osr, list *on_commits); -- 2.39.5