_key_encode_u64(seq, out);
}
+template <int LogLevelV>
+void _dump_extent_map(CephContext *cct, const BlueStore::ExtentMap &em)
+{
+ uint64_t pos = 0;
+ for (auto& s : em.shards) {
+ dout(LogLevelV) << __func__ << " shard " << *s.shard_info
+ << (s.loaded ? " (loaded)" : "")
+ << (s.dirty ? " (dirty)" : "")
+ << dendl;
+ }
+ for (auto& e : em.extent_map) {
+ dout(LogLevelV) << __func__ << " " << e << dendl;
+ ceph_assert(e.logical_offset >= pos);
+ pos = e.logical_offset + e.length;
+ const bluestore_blob_t& blob = e.blob->get_blob();
+ if (blob.has_csum()) {
+ vector<uint64_t> v;
+ unsigned n = blob.get_csum_count();
+ for (unsigned i = 0; i < n; ++i)
+ v.push_back(blob.get_csum_item(i));
+ dout(LogLevelV) << __func__ << " csum: " << std::hex << v << std::dec
+ << dendl;
+ }
+ std::lock_guard l(e.blob->shared_blob->get_cache()->lock);
+ for (auto& i : e.blob->shared_blob->bc.buffer_map) {
+ dout(LogLevelV) << __func__ << " 0x" << std::hex << i.first
+ << "~" << i.second->length << std::dec
+ << " " << *i.second << dendl;
+ }
+ }
+}
+
+template <int LogLevelV>
+void _dump_onode(CephContext *cct, const BlueStore::Onode& o)
+{
+ if (!cct->_conf->subsys.should_gather<ceph_subsys_bluestore, LogLevelV>())
+ return;
+ dout(LogLevelV) << __func__ << " " << &o << " " << o.oid
+ << " nid " << o.onode.nid
+ << " size 0x" << std::hex << o.onode.size
+ << " (" << std::dec << o.onode.size << ")"
+ << " expected_object_size " << o.onode.expected_object_size
+ << " expected_write_size " << o.onode.expected_write_size
+ << " in " << o.onode.extent_map_shards.size() << " shards"
+ << ", " << o.extent_map.spanning_blob_map.size()
+ << " spanning blobs"
+ << dendl;
+ for (auto p = o.onode.attrs.begin();
+ p != o.onode.attrs.end();
+ ++p) {
+ dout(LogLevelV) << __func__ << " attr " << p->first
+ << " len " << p->second.length() << dendl;
+ }
+ _dump_extent_map<LogLevelV>(cct, o.extent_map);
+}
+
+template <int LogLevelV>
+void _dump_transaction(CephContext *cct, ObjectStore::Transaction *t)
+{
+ dout(LogLevelV) << __func__ << " transaction dump:\n";
+ JSONFormatter f(true);
+ f.open_object_section("transaction");
+ t->dump(&f);
+ f.close_section();
+ f.flush(*_dout);
+ *_dout << dendl;
+}
// merge operators
++num_objects;
num_spanning_blobs += o->extent_map.spanning_blob_map.size();
o->extent_map.fault_range(db, 0, OBJECT_MAX_SIZE);
- _dump_onode(o);
+ _dump_onode<30>(cct, *o);
// shards
if (!o->extent_map.shards.empty()) {
++num_sharded_objects;
if (misref_extents.intersects(e.offset, e.length)) {
if (first_dump) {
first_dump = false;
- _dump_onode<10>(o);
+ _dump_onode<10>(cct, *o);
}
broken_blob = true;
break;
utime_t start = ceph_clock_now();
o->extent_map.fault_range(db, offset, length);
logger->tinc(l_bluestore_read_onode_meta_lat, ceph_clock_now() - start);
- _dump_onode(o);
+ _dump_onode<30>(cct, *o);
ready_regions_t ready_regions;
if (!o || !o->exists) {
return -ENOENT;
}
- _dump_onode(o);
+ _dump_onode<30>(cct, *o);
dout(20) << __func__ << " 0x" << std::hex << offset << "~" << length
<< " size 0x" << o->onode.size << std::dec << dendl;
{
Transaction::iterator i = t->begin();
- _dump_transaction(t);
+ _dump_transaction<30>(cct, t);
vector<CollectionRef> cvec(i.colls.size());
unsigned j = 0;
derr << __func__ << " error " << cpp_strerror(r)
<< " not handled on operation " << op->op
<< " (op " << pos << ", counting from 0)" << dendl;
- _dump_transaction<0>(t);
+ _dump_transaction<0>(cct, t);
ceph_assert(0 == "unexpected error");
}
<< " (op " << pos << ", counting from 0)"
<< dendl;
derr << msg << dendl;
- _dump_transaction<0>(t);
+ _dump_transaction<0>(cct, t);
ceph_assert(0 == "unexpected error");
}
}
return r;
}
-template <int LogLevelV>
-void BlueStore::_dump_onode(const OnodeRef& o)
-{
- if (!cct->_conf->subsys.should_gather<ceph_subsys_bluestore, LogLevelV>())
- return;
- dout(LogLevelV) << __func__ << " " << o << " " << o->oid
- << " nid " << o->onode.nid
- << " size 0x" << std::hex << o->onode.size
- << " (" << std::dec << o->onode.size << ")"
- << " expected_object_size " << o->onode.expected_object_size
- << " expected_write_size " << o->onode.expected_write_size
- << " in " << o->onode.extent_map_shards.size() << " shards"
- << ", " << o->extent_map.spanning_blob_map.size()
- << " spanning blobs"
- << dendl;
- for (auto p = o->onode.attrs.begin();
- p != o->onode.attrs.end();
- ++p) {
- dout(LogLevelV) << __func__ << " attr " << p->first
- << " len " << p->second.length() << dendl;
- }
- _dump_extent_map<LogLevelV>(o->extent_map);
-}
-
-template <int LogLevelV>
-void BlueStore::_dump_extent_map(ExtentMap &em)
-{
- uint64_t pos = 0;
- for (auto& s : em.shards) {
- dout(LogLevelV) << __func__ << " shard " << *s.shard_info
- << (s.loaded ? " (loaded)" : "")
- << (s.dirty ? " (dirty)" : "")
- << dendl;
- }
- for (auto& e : em.extent_map) {
- dout(LogLevelV) << __func__ << " " << e << dendl;
- ceph_assert(e.logical_offset >= pos);
- pos = e.logical_offset + e.length;
- const bluestore_blob_t& blob = e.blob->get_blob();
- if (blob.has_csum()) {
- vector<uint64_t> v;
- unsigned n = blob.get_csum_count();
- for (unsigned i = 0; i < n; ++i)
- v.push_back(blob.get_csum_item(i));
- dout(LogLevelV) << __func__ << " csum: " << std::hex << v << std::dec
- << dendl;
- }
- std::lock_guard<std::recursive_mutex> l(e.blob->shared_blob->get_cache()->lock);
- for (auto& i : e.blob->shared_blob->bc.buffer_map) {
- dout(LogLevelV) << __func__ << " 0x" << std::hex << i.first
- << "~" << i.second->length << std::dec
- << " " << *i.second << dendl;
- }
- }
-}
-
-template <int LogLevelV>
-void BlueStore::_dump_transaction(Transaction *t)
-{
- dout(LogLevelV) << __func__ << " transaction dump:\n";
- JSONFormatter f(true);
- f.open_object_section("transaction");
- t->dump(&f);
- f.close_section();
- f.flush(*_dout);
- *_dout << dendl;
-}
-
void BlueStore::_pad_zeros(
bufferlist *bl, uint64_t *offset,
uint64_t chunk_size)
<< " bytes"
<< " fadvise_flags 0x" << std::hex << fadvise_flags << std::dec
<< dendl;
- _dump_onode(o);
+ _dump_onode<30>(cct, *o);
if (length == 0) {
return 0;
<< dendl;
int r = 0;
- _dump_onode(o);
+ _dump_onode<30>(cct, *o);
WriteContext wctx;
o->extent_map.fault_range(db, offset, length);
dout(15) << __func__ << " " << c->cid << " " << o->oid
<< " 0x" << std::hex << offset << std::dec << dendl;
- _dump_onode(o);
+ _dump_onode<30>(cct, *o);
if (offset == o->onode.size)
return;
<< " 0x" << dstoff << "~" << length << std::dec << dendl;
oldo->extent_map.fault_range(db, srcoff, length);
newo->extent_map.fault_range(db, dstoff, length);
- _dump_onode(oldo);
- _dump_onode(newo);
+ _dump_onode<30>(cct, *oldo);
+ _dump_onode<30>(cct, *newo);
oldo->extent_map.dup(this, txc, c, oldo, newo, srcoff, length, dstoff);
- _dump_onode(oldo);
- _dump_onode(newo);
+ _dump_onode<30>(cct, *oldo);
+ _dump_onode<30>(cct, *newo);
return 0;
}