From f132f152ff675e5b6b0e86ab14332d1a1d0b8a32 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 3 May 2016 15:07:50 -0400 Subject: [PATCH] os/bluestore: add blob_map to onode_t Signed-off-by: Sage Weil --- src/os/bluestore/bluestore_types.cc | 22 +++++++++++++++++++++- src/os/bluestore/bluestore_types.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/src/os/bluestore/bluestore_types.cc b/src/os/bluestore/bluestore_types.cc index 1f4c5dc784f97..cf7889050550f 100644 --- a/src/os/bluestore/bluestore_types.cc +++ b/src/os/bluestore/bluestore_types.cc @@ -538,7 +538,9 @@ void bluestore_onode_t::encode(bufferlist& bl) const ::encode(nid, bl); ::encode(size, bl); ::encode(attrs, bl); + ::encode(blob_map, bl); ::encode(block_map, bl); + ::encode(extent_map, bl); ::encode(overlay_map, bl); ::encode(overlay_refs, bl); ::encode(last_overlay_key, bl); @@ -555,7 +557,9 @@ void bluestore_onode_t::decode(bufferlist::iterator& p) ::decode(nid, p); ::decode(size, p); ::decode(attrs, p); + ::decode(blob_map, p); ::decode(block_map, p); + ::decode(extent_map, p); ::decode(overlay_map, p); ::decode(overlay_refs, p); ::decode(last_overlay_key, p); @@ -588,8 +592,24 @@ void bluestore_onode_t::dump(Formatter *f) const f->close_section(); } f->close_section(); + f->open_object_section("blob_map"); + for (const auto& p : blob_map) { + f->open_object_section("blob"); + f->dump_unsigned("id", p.first); + p.second.dump(f); + f->close_section(); + } + f->close_section(); + f->open_object_section("extent_map"); + for (const auto& p : extent_map) { + f->open_object_section("extent"); + f->dump_unsigned("logical_offset", p.first); + p.second.dump(f); + f->close_section(); + } + f->close_section(); f->open_object_section("overlays"); - for (map::const_iterator p = overlay_map.begin(); + for (map::const_iterator p = overlay_map.begin(); p != overlay_map.end(); ++p) { f->open_object_section("overlay"); f->dump_unsigned("offset", p->first); diff --git a/src/os/bluestore/bluestore_types.h b/src/os/bluestore/bluestore_types.h index 480be8121e4ff..71c721bfd262e 100644 --- a/src/os/bluestore/bluestore_types.h +++ b/src/os/bluestore/bluestore_types.h @@ -448,8 +448,10 @@ struct bluestore_onode_t { uint64_t size; ///< object size map attrs; ///< attrs map block_map; ///< block data + map extent_map; ///< extent refs map overlay_map; ///< overlay data (stored in db) map overlay_refs; ///< overlay keys ref counts (if >1) + bluestore_blob_map_t blob_map; ///< local blobs (this onode onode) uint32_t last_overlay_key; ///< key for next overlay uint64_t omap_head; ///< id for omap root node @@ -490,6 +492,32 @@ struct bluestore_onode_t { return fp; } + map::iterator find_lextent(uint64_t offset) { + map::iterator fp = + extent_map.lower_bound(offset); + if (fp != extent_map.begin()) { + --fp; + if (fp->first + fp->second.length <= offset) { + ++fp; + } + } + if (fp != extent_map.end() && fp->first > offset) + return extent_map.end(); // extent is past offset + return fp; + } + + map::iterator seek_lextent(uint64_t offset) { + map::iterator fp = + extent_map.lower_bound(offset); + if (fp != extent_map.begin()) { + --fp; + if (fp->first + fp->second.length <= offset) { + ++fp; + } + } + return fp; + } + bool put_overlay_ref(uint64_t key) { map::iterator q = overlay_refs.find(key); if (q == overlay_refs.end()) -- 2.39.5