::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);
::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);
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<uint64_t, bluestore_overlay_t>::const_iterator p = overlay_map.begin();
+ for (map<uint64_t,bluestore_overlay_t>::const_iterator p = overlay_map.begin();
p != overlay_map.end(); ++p) {
f->open_object_section("overlay");
f->dump_unsigned("offset", p->first);
uint64_t size; ///< object size
map<string, bufferptr> attrs; ///< attrs
map<uint64_t, bluestore_extent_t> block_map; ///< block data
+ map<uint64_t,bluestore_lextent_t> extent_map; ///< extent refs
map<uint64_t,bluestore_overlay_t> overlay_map; ///< overlay data (stored in db)
map<uint64_t,uint16_t> 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
return fp;
}
+ map<uint64_t,bluestore_lextent_t>::iterator find_lextent(uint64_t offset) {
+ map<uint64_t,bluestore_lextent_t>::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<uint64_t,bluestore_lextent_t>::iterator seek_lextent(uint64_t offset) {
+ map<uint64_t,bluestore_lextent_t>::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<uint64_t,uint16_t>::iterator q = overlay_refs.find(key);
if (q == overlay_refs.end())