]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: minor refactoring around OnodeSpace struct to improve code
authorIgor Fedotov <ifedotov@suse.com>
Tue, 16 Aug 2022 14:03:04 +0000 (17:03 +0300)
committerIgor Fedotov <igor.fedotov@croit.io>
Fri, 13 Jan 2023 12:05:41 +0000 (15:05 +0300)
readability.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 9157fcba19d84d958b4a37dfd13de33265cfeff9..036ec8b81be95c3784342eb374af86c3f096c0a6 100644 (file)
@@ -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<ghobject_t,OnodeRef>::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<BlobRef> blobs;
 
index 595809fdb9239984760e7d1fe1f289b6c0a11fb9..b1dd71db93952fb19e9d5de8078fae828f77a7eb 100644 (file)
@@ -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<Onode> 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,