From 3df4a8d91423fc11c3a66ec7cd25587d0d85beac Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Tue, 16 Aug 2022 17:03:04 +0300 Subject: [PATCH] os/bluestore: minor refactoring around OnodeSpace struct to improve code readability. Signed-off-by: Igor Fedotov --- src/os/bluestore/BlueStore.cc | 52 ++++++++++++++++++----------------- src/os/bluestore/BlueStore.h | 11 +++++--- 2 files changed, 34 insertions(+), 29 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 9157fcba19d84..036ec8b81be95 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -1924,7 +1924,7 @@ void BlueStore::BufferSpace::split(BufferCacheShard* cache, size_t pos, BlueStor #undef dout_prefix #define dout_prefix *_dout << "bluestore.OnodeSpace(" << this << " in " << cache << ") " -BlueStore::OnodeRef BlueStore::OnodeSpace::add(const ghobject_t& oid, +BlueStore::OnodeRef BlueStore::OnodeSpace::add_onode(const ghobject_t& oid, OnodeRef& o) { std::lock_guard l(cache->lock); @@ -1957,8 +1957,8 @@ BlueStore::OnodeRef BlueStore::OnodeSpace::lookup(const ghobject_t& oid) std::lock_guard l(cache->lock); ceph::unordered_map::iterator p = onode_map.find(oid); if (p == onode_map.end()) { - cache->logger->inc(l_bluestore_onode_misses); ldout(cache->cct, 30) << __func__ << " " << oid << " miss" << dendl; + cache->logger->inc(l_bluestore_onode_misses); } else { ldout(cache->cct, 30) << __func__ << " " << oid << " hit " << p->second << " " << p->second->nref @@ -3759,6 +3759,7 @@ void BlueStore::Onode::decode_raw( const bufferlist& v, BlueStore::ExtentMap::ExtentDecoder& edecoder) { + on->exists = true; auto p = v.front().begin_deep(); on->onode.decode(p); @@ -3770,28 +3771,31 @@ void BlueStore::Onode::decode_raw( } } -BlueStore::Onode* BlueStore::Onode::decode( +BlueStore::Onode* BlueStore::Onode::create_decode( CollectionRef c, const ghobject_t& oid, const string& key, - const bufferlist& v) + const bufferlist& v, + bool allow_empty) { + ceph_assert(v.length() || allow_empty); Onode* on = new Onode(c.get(), oid, key); - on->exists = true; - ExtentMap::ExtentDecoderFull edecoder(on->extent_map); - decode_raw(on, v, edecoder); + if (v.length()) { + ExtentMap::ExtentDecoderFull edecoder(on->extent_map); + decode_raw(on, v, edecoder); - for (auto& i : on->onode.attrs) { - i.second.reassign_to_mempool(mempool::mempool_bluestore_cache_meta); - } + for (auto& i : on->onode.attrs) { + i.second.reassign_to_mempool(mempool::mempool_bluestore_cache_meta); + } - // initialize extent_map - if (on->onode.extent_map_shards.empty()) { - on->extent_map.inline_bl.reassign_to_mempool( - mempool::mempool_bluestore_cache_data); - } else { - on->extent_map.init_shards(false, false); + // initialize extent_map + if (on->onode.extent_map_shards.empty()) { + on->extent_map.inline_bl.reassign_to_mempool( + mempool::mempool_bluestore_cache_data); + } else { + on->extent_map.init_shards(false, false); + } } return on; } @@ -4131,16 +4135,14 @@ BlueStore::OnodeRef BlueStore::Collection::get_onode( ceph_assert(r == -ENOENT); if (!create) return OnodeRef(); - - // new object, new onode - on = new Onode(this, oid, key); } else { - // loaded ceph_assert(r >= 0); - on = Onode::decode(this, oid, key, v); } + + // new object, load onode if available + on = Onode::create_decode(this, oid, key, v, true); o.reset(on); - return onode_space.add(oid, o); + return onode_space.add_onode(oid, o); } void BlueStore::Collection::split_cache( @@ -8104,7 +8106,7 @@ void BlueStore::_fsck_repair_shared_blobs( << dendl; OnodeRef o; - o.reset(Onode::decode(c, oid, it->key(), it->value())); + o.reset(Onode::create_decode(c, oid, it->key(), it->value())); o->extent_map.fault_range(db, 0, OBJECT_MAX_SIZE); _dump_onode<30>(cct, *o); @@ -8243,7 +8245,7 @@ BlueStore::OnodeRef BlueStore::fsck_check_objects_shallow( dout(10) << __func__ << " " << oid << dendl; OnodeRef o; - o.reset(Onode::decode(c, oid, key, value)); + o.reset(Onode::create_decode(c, oid, key, value)); ++num_objects; num_spanning_blobs += o->extent_map.spanning_blob_map.size(); @@ -9635,7 +9637,7 @@ int BlueStore::_fsck_on_open(BlueStore::FSCKDepth depth, bool repair) << " obj:" << oid << dendl; OnodeRef o; - o.reset(Onode::decode(c, oid, it->key(), it->value())); + o.reset(Onode::create_decode(c, oid, it->key(), it->value())); o->extent_map.fault_range(db, 0, OBJECT_MAX_SIZE); mempool::bluestore_fsck::set blobs; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 595809fdb9239..b1dd71db93952 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -1261,11 +1261,13 @@ public: BlueStore::Onode* on, const bufferlist& v, ExtentMap::ExtentDecoder& dencoder); - static Onode* decode( + + static Onode* create_decode( CollectionRef c, const ghobject_t& oid, const std::string& key, - const ceph::buffer::list& v); + const ceph::buffer::list& v, + bool allow_empty = false); void dump(ceph::Formatter* f) const; @@ -1319,7 +1321,8 @@ public: get_blob().calc_offset(0, nullptr); } #endif - +private: + void _decode(const ceph::buffer::list& v); }; typedef boost::intrusive_ptr OnodeRef; @@ -1487,7 +1490,7 @@ public: clear(); } - OnodeRef add(const ghobject_t& oid, OnodeRef& o); + OnodeRef add_onode(const ghobject_t& oid, OnodeRef& o); OnodeRef lookup(const ghobject_t& o); void rename(OnodeRef& o, const ghobject_t& old_oid, const ghobject_t& new_oid, -- 2.39.5