From c7ed3aa7a20c0b980edd9cb3378d8f0b883ce8ee Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Tue, 24 May 2016 15:52:15 +0300 Subject: [PATCH] os/bluestore: Fixes Bnode serialization/deserialization and removes legacy Bnode::ref_map Signed-off-by: Igor Fedotov --- src/os/bluestore/BlueStore.cc | 25 ++++++++++++++----------- src/os/bluestore/BlueStore.h | 1 - 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 582c966c07f99..e8a23ed36dafc 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -645,19 +645,19 @@ BlueStore::BnodeRef BlueStore::Collection::get_bnode( get_bnode_key(pgid.shard, pgid.pool(), hash, &key); BnodeRef e = new Bnode(hash, key, &bnode_set); dout(10) << __func__ << " hash " << std::hex << hash << std::dec - << " created " << e << dendl; + << " created " << e << " " << key << dendl; bufferlist v; int r = store->db->get(PREFIX_OBJ, key, &v); if (r >= 0) { assert(v.length() > 0); bufferlist::iterator p = v.begin(); - ::decode(e->ref_map, p); + ::decode(e->blob_map, p); dout(10) << __func__ << " hash " << std::hex << hash << std::dec - << " loaded ref_map " << e->ref_map << dendl; + << " loaded blob_map " << e->blob_map << dendl; } else { dout(10) << __func__ << " hash " < 0 && lext != lextents.end()) { //bluestore_blob_t* bptr = get_blob(lext->second.blob); const bluestore_blob_t *bptr = c->get_blob_ptr(o, lext->second.blob); + if (bptr == nullptr) { + dout(20) << __func__ << " missed blob " << lext->second.blob << dendl; + _dump_onode(o); + } assert(bptr != nullptr); uint32_t l2read; if (off >= lext->first && off < lext->first + lext->second.length) { @@ -4159,15 +4163,15 @@ void BlueStore::_txc_write_nodes(TransContext *txc, KeyValueDB::Transaction t) for (set::iterator p = txc->bnodes.begin(); p != txc->bnodes.end(); ++p) { - if ((*p)->ref_map.empty()) { - dout(20) << " bnode " << std::hex << (*p)->hash << std::dec - << " ref_map is empty" << dendl; + if ((*p)->blob_map.empty()) { + dout(20) << " bnode " << std::hex << (*p)->hash << " " << (*p)->key << std::dec + << " blob_map is empty" << dendl; t->rmkey(PREFIX_OBJ, (*p)->key); } else { bufferlist bl; - ::encode((*p)->ref_map, bl); - dout(20) << " bnode " << std::hex << (*p)->hash << std::dec - << " ref_map is " << bl.length() << dendl; + ::encode((*p)->blob_map, bl); + dout(20) << " bnode " << std::hex << (*p)->hash << " " << (*p)->key << std::dec + << " blob_map is " << bl.length() << dendl; t->set(PREFIX_OBJ, (*p)->key, bl); } } @@ -5211,7 +5215,6 @@ void BlueStore::_dump_bnode(BnodeRef b, int log_level) if (!g_conf->subsys.should_gather(ceph_subsys_bluestore, log_level)) return; dout(log_level) << __func__ << " " << std::hex << b->hash << std::dec << dendl; - dout(log_level) << __func__ << " " << b->ref_map << dendl; for (auto &p : b->blob_map) { dout(log_level) << __func__ << " " << p.first << ": " << p.second << dendl; if (p.second.csum_data.size()) { diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index f27e9b1280618..be94a2df5b4c4 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -363,7 +363,6 @@ public: string key; ///< key under PREFIX_OBJ where we are stored BnodeSet *bnode_set; ///< reference to the containing set - bluestore_extent_ref_map_t ref_map; bluestore_blob_map_t blob_map; Bnode(uint32_t h, const string& k, BnodeSet *s) -- 2.39.5