From 0186e6e4057c486182895121a243ac8f2460c00d Mon Sep 17 00:00:00 2001 From: dongdong tao Date: Sun, 7 Jan 2018 14:59:44 +0800 Subject: [PATCH] mds: add dump flag for CInode Signed-off-by: dongdong tao --- src/mds/CInode.cc | 214 ++++++++++++++++++++++++--------------------- src/mds/CInode.h | 12 ++- src/mds/MDCache.cc | 7 +- src/mds/MDCache.h | 2 +- src/mds/MDLog.h | 4 - 5 files changed, 128 insertions(+), 111 deletions(-) diff --git a/src/mds/CInode.cc b/src/mds/CInode.cc index 32aaa640894..02f43b1be2c 100644 --- a/src/mds/CInode.cc +++ b/src/mds/CInode.cc @@ -4277,111 +4277,127 @@ bool CInode::validated_data::all_damage_repaired() const return !unrepaired; } -void CInode::dump(Formatter *f) const -{ - InodeStoreBase::dump(f); - - MDSCacheObject::dump(f); - - f->open_object_section("versionlock"); - versionlock.dump(f); - f->close_section(); - - f->open_object_section("authlock"); - authlock.dump(f); - f->close_section(); - - f->open_object_section("linklock"); - linklock.dump(f); - f->close_section(); - - f->open_object_section("dirfragtreelock"); - dirfragtreelock.dump(f); - f->close_section(); - - f->open_object_section("filelock"); - filelock.dump(f); - f->close_section(); - - f->open_object_section("xattrlock"); - xattrlock.dump(f); - f->close_section(); - - f->open_object_section("snaplock"); - snaplock.dump(f); - f->close_section(); - - f->open_object_section("nestlock"); - nestlock.dump(f); - f->close_section(); - - f->open_object_section("flocklock"); - flocklock.dump(f); - f->close_section(); - - f->open_object_section("policylock"); - policylock.dump(f); - f->close_section(); - - f->open_array_section("states"); - MDSCacheObject::dump_states(f); - if (state_test(STATE_EXPORTING)) - f->dump_string("state", "exporting"); - if (state_test(STATE_OPENINGDIR)) - f->dump_string("state", "openingdir"); - if (state_test(STATE_FREEZING)) - f->dump_string("state", "freezing"); - if (state_test(STATE_FROZEN)) - f->dump_string("state", "frozen"); - if (state_test(STATE_AMBIGUOUSAUTH)) - f->dump_string("state", "ambiguousauth"); - if (state_test(STATE_EXPORTINGCAPS)) - f->dump_string("state", "exportingcaps"); - if (state_test(STATE_NEEDSRECOVER)) - f->dump_string("state", "needsrecover"); - if (state_test(STATE_PURGING)) - f->dump_string("state", "purging"); - if (state_test(STATE_DIRTYPARENT)) - f->dump_string("state", "dirtyparent"); - if (state_test(STATE_DIRTYRSTAT)) - f->dump_string("state", "dirtyrstat"); - if (state_test(STATE_STRAYPINNED)) - f->dump_string("state", "straypinned"); - if (state_test(STATE_FROZENAUTHPIN)) - f->dump_string("state", "frozenauthpin"); - if (state_test(STATE_DIRTYPOOL)) - f->dump_string("state", "dirtypool"); - if (state_test(STATE_ORPHAN)) - f->dump_string("state", "orphan"); - if (state_test(STATE_MISSINGOBJS)) - f->dump_string("state", "missingobjs"); - f->close_section(); - - f->open_array_section("client_caps"); - for (map::const_iterator it = client_caps.begin(); - it != client_caps.end(); ++it) { - f->open_object_section("client_cap"); - f->dump_int("client_id", it->first.v); - f->dump_string("pending", ccap_string(it->second->pending())); - f->dump_string("issued", ccap_string(it->second->issued())); - f->dump_string("wanted", ccap_string(it->second->wanted())); - f->dump_int("last_sent", it->second->get_last_sent()); +void CInode::dump(Formatter *f, int flags) const +{ + if (flags & DUMP_PATH) { + std::string path; + make_path_string(path, true); + if (path.empty()) + path = "/"; + f->dump_string("path", path); + } + + if (flags & DUMP_INODE_STORE_BASE) + InodeStoreBase::dump(f); + + if (flags & DUMP_MDS_CACHE_OBJECT) + MDSCacheObject::dump(f); + + if (flags & DUMP_LOCKS) { + f->open_object_section("versionlock"); + versionlock.dump(f); + f->close_section(); + + f->open_object_section("authlock"); + authlock.dump(f); + f->close_section(); + + f->open_object_section("linklock"); + linklock.dump(f); + f->close_section(); + + f->open_object_section("dirfragtreelock"); + dirfragtreelock.dump(f); + f->close_section(); + + f->open_object_section("filelock"); + filelock.dump(f); + f->close_section(); + + f->open_object_section("xattrlock"); + xattrlock.dump(f); + f->close_section(); + + f->open_object_section("snaplock"); + snaplock.dump(f); + f->close_section(); + + f->open_object_section("nestlock"); + nestlock.dump(f); + f->close_section(); + + f->open_object_section("flocklock"); + flocklock.dump(f); + f->close_section(); + + f->open_object_section("policylock"); + policylock.dump(f); f->close_section(); } - f->close_section(); - f->dump_int("loner", loner_cap.v); - f->dump_int("want_loner", want_loner_cap.v); + if (flags & DUMP_STATE) { + f->open_array_section("states"); + MDSCacheObject::dump_states(f); + if (state_test(STATE_EXPORTING)) + f->dump_string("state", "exporting"); + if (state_test(STATE_OPENINGDIR)) + f->dump_string("state", "openingdir"); + if (state_test(STATE_FREEZING)) + f->dump_string("state", "freezing"); + if (state_test(STATE_FROZEN)) + f->dump_string("state", "frozen"); + if (state_test(STATE_AMBIGUOUSAUTH)) + f->dump_string("state", "ambiguousauth"); + if (state_test(STATE_EXPORTINGCAPS)) + f->dump_string("state", "exportingcaps"); + if (state_test(STATE_NEEDSRECOVER)) + f->dump_string("state", "needsrecover"); + if (state_test(STATE_PURGING)) + f->dump_string("state", "purging"); + if (state_test(STATE_DIRTYPARENT)) + f->dump_string("state", "dirtyparent"); + if (state_test(STATE_DIRTYRSTAT)) + f->dump_string("state", "dirtyrstat"); + if (state_test(STATE_STRAYPINNED)) + f->dump_string("state", "straypinned"); + if (state_test(STATE_FROZENAUTHPIN)) + f->dump_string("state", "frozenauthpin"); + if (state_test(STATE_DIRTYPOOL)) + f->dump_string("state", "dirtypool"); + if (state_test(STATE_ORPHAN)) + f->dump_string("state", "orphan"); + if (state_test(STATE_MISSINGOBJS)) + f->dump_string("state", "missingobjs"); + f->close_section(); + } - f->open_array_section("mds_caps_wanted"); - for (compact_map::const_iterator p = mds_caps_wanted.begin(); - p != mds_caps_wanted.end(); ++p) { - f->open_object_section("mds_cap_wanted"); - f->dump_int("rank", p->first); - f->dump_string("cap", ccap_string(p->second)); + if (flags & DUMP_CAPS) { + f->open_array_section("client_caps"); + for (map::const_iterator it = client_caps.begin(); + it != client_caps.end(); ++it) { + f->open_object_section("client_cap"); + f->dump_int("client_id", it->first.v); + f->dump_string("pending", ccap_string(it->second->pending())); + f->dump_string("issued", ccap_string(it->second->issued())); + f->dump_string("wanted", ccap_string(it->second->wanted())); + f->dump_int("last_sent", it->second->get_last_sent()); + f->close_section(); + } + f->close_section(); + + f->dump_int("loner", loner_cap.v); + f->dump_int("want_loner", want_loner_cap.v); + + f->open_array_section("mds_caps_wanted"); + for (compact_map::const_iterator p = mds_caps_wanted.begin(); + p != mds_caps_wanted.end(); ++p) { + f->open_object_section("mds_cap_wanted"); + f->dump_int("rank", p->first); + f->dump_string("cap", ccap_string(p->second)); + f->close_section(); + } f->close_section(); } - f->close_section(); } /****** Scrub Stuff *****/ diff --git a/src/mds/CInode.h b/src/mds/CInode.h index 02edfd443fd..c7ea6ac73f2 100644 --- a/src/mds/CInode.h +++ b/src/mds/CInode.h @@ -196,6 +196,16 @@ class CInode : public MDSCacheObject, public InodeStoreBase, public Counterlast == CEPH_NOSNAP && !in->is_any_caps_wanted()) || (in->last != CEPH_NOSNAP && in->client_snap_caps.empty())) continue; - std::string path; - in->make_path_string(path, true); - if (path.empty()) - path = "/" f->open_object_section("file"); - f->dump_string("path", path); - in->dump(f); + in->dump(f, CInode::DUMP_PATH | CInode::DUMP_INODE_STORE_BASE | CInode::DUMP_CAPS); f->close_section(); } } diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 0914637330d..f05ecb6d3c3 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -1178,7 +1178,7 @@ public: int dump_cache(const std::string &filename); int dump_cache(Formatter *f); int dump_cache(const std::string& dump_root, int depth, Formatter *f); - + int cache_status(Formatter *f); void dump_resolve_status(Formatter *f) const; diff --git a/src/mds/MDLog.h b/src/mds/MDLog.h index 02dc5803056..5579e5abc00 100644 --- a/src/mds/MDLog.h +++ b/src/mds/MDLog.h @@ -246,10 +246,6 @@ public: return segments[seq]; return NULL; } - - const std::map &get_segments() { - return segments; - } bool have_any_segments() const { return !segments.empty(); -- 2.39.5