From b764b630acc4e356846bbef92aa7fc226a17751e Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 9 Dec 2008 09:58:08 -0800 Subject: [PATCH] mon: factor out mds print, print_summary --- src/Makefile.am | 1 + src/mds/MDSMap.cc | 84 +++++++++++++++++++++++++++++++++++++++++++ src/mds/MDSMap.h | 5 ++- src/mon/MDSMonitor.cc | 63 +++++++------------------------- 4 files changed, 99 insertions(+), 54 deletions(-) create mode 100644 src/mds/MDSMap.cc diff --git a/src/Makefile.am b/src/Makefile.am index 430a3a075d83a..c392141b42090 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -182,6 +182,7 @@ libcommon_a_SOURCES = \ mon/MonMap.cc \ mon/MonClient.cc \ osd/OSDMap.cc \ + mds/MDSMap.cc \ config.cc libcrush_a_SOURCES = \ diff --git a/src/mds/MDSMap.cc b/src/mds/MDSMap.cc new file mode 100644 index 0000000000000..e864cd86f1910 --- /dev/null +++ b/src/mds/MDSMap.cc @@ -0,0 +1,84 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2004-2006 Sage Weil + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + + +#include "MDSMap.h" + +#include +using std::stringstream; + +void MDSMap::print(ostream& out) +{ + out << "epoch " << get_epoch() << std::endl; + out << "max_mds " << max_mds << std::endl; + + entity_inst_t blank; + set all; + get_mds_set(all); + + for (set::iterator p = all.begin(); + p != all.end(); + ++p) { + if (standby_for.count(*p) && !standby_for[*p].empty()) { + out << " mds" << *p << "." << mds_inc[*p] + << " : " << get_state_name(get_state(*p)) + << " : " << (have_inst(*p) ? get_inst(*p) : blank) + << " : +" << standby_for[*p].size() + << " standby " << standby_for[*p] + << std::endl; + } else { + out << " mds" << *p << "." << mds_inc[*p] + << " : " << get_state_name(get_state(*p)) + << " : " << (have_inst(*p) ? get_inst(*p) : blank) + << std::endl; + } + } + if (!standby_any.empty()) { + out << " +" << standby_any.size() << " shared standby " << standby_any << std::endl; + } +} + + + +void MDSMap::print_summary(ostream& out) +{ + stringstream ss; + + set all; + get_mds_set(all); + + int standby_spec = 0; + map by_state; + for (set::iterator p = all.begin(); + p != all.end(); + ++p) { + by_state[get_state(*p)]++; + standby_spec += get_num_standby_for(*p); + } + + for (map::iterator p = by_state.begin(); p != by_state.end(); p++) { + if (p != by_state.begin()) + ss << ", "; + ss << p->second << " " << MDSMap::get_state_name(p->first); + } + if (get_num_standby_any()) + ss << ", " << get_num_standby_any() << " standby (any)"; + if (standby_spec) + ss << ", " << standby_spec << " standby (specific)"; + + string states = ss.str(); + out << "e" << get_epoch() << ": " + << all.size() << " nodes: " + << states; +} diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index ba77f56224296..d30b234ded00e 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -386,9 +386,8 @@ class MDSMap { } - /*** mapping functions ***/ - - int hash_dentry( inodeno_t dirino, const string& dn ); + void print(ostream& out); + void print_summary(ostream& out); }; #endif diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index b712fc3be9f04..2ec9933507a60 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -48,61 +48,15 @@ static ostream& _prefix(Monitor *mon, MDSMap& mdsmap) { void MDSMonitor::print_map(MDSMap &m, int dbl) { - dout(7) << "print_map epoch " << m.get_epoch() << " max " << m.max_mds << dendl; - entity_inst_t blank; - set all; - m.get_mds_set(all); - for (set::iterator p = all.begin(); - p != all.end(); - ++p) { - if (m.standby_for.count(*p) && !m.standby_for[*p].empty()) { - dout(7) << " mds" << *p << "." << m.mds_inc[*p] - << " : " << MDSMap::get_state_name(m.get_state(*p)) - << " : " << (m.have_inst(*p) ? m.get_inst(*p) : blank) - << " : +" << m.standby_for[*p].size() - << " standby " << m.standby_for[*p] - << dendl; - } else { - dout(7) << " mds" << *p << "." << m.mds_inc[*p] - << " : " << MDSMap::get_state_name(m.get_state(*p)) - << " : " << (m.have_inst(*p) ? m.get_inst(*p) : blank) - << dendl; - } - } - if (!m.standby_any.empty()) { - dout(7) << " +" << m.standby_any.size() << " shared standby " << m.standby_any << dendl; - } + dout(7) << "print_map"; + m.print(*_dout); + *_dout << dendl; } ostream& operator<<(ostream& out, MDSMonitor& mm) { - std::stringstream ss; - set all; - MDSMap &m = mm.mdsmap; - m.get_mds_set(all); - int standby_spec = 0; - map by_state; - for (set::iterator p = all.begin(); - p != all.end(); - ++p) { - by_state[m.get_state(*p)]++; - standby_spec += m.get_num_standby_for(*p); - } - - for (map::iterator p = by_state.begin(); p != by_state.end(); p++) { - if (p != by_state.begin()) - ss << ", "; - ss << p->second << " " << MDSMap::get_state_name(p->first); - } - if (m.get_num_standby_any()) - ss << ", " << m.get_num_standby_any() << " standby (any)"; - if (standby_spec) - ss << ", " << standby_spec << " standby (specific)"; - - string states = ss.str(); - return out << "e" << m.get_epoch() << ": " - << all.size() << " nodes: " - << states; + mm.mdsmap.print_summary(out); + return out; } @@ -511,6 +465,13 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) ss << *this; r = 0; } + else if (m->cmd[1] == "dump") { + stringstream ds; + mdsmap.print(ds); + rdata.append(ds); + ss << "dumped mdsmap epoch " << mdsmap.get_epoch(); + r = 0; + } else if (m->cmd[1] == "getmap") { mdsmap.encode(rdata); ss << "got mdsmap epoch " << mdsmap.get_epoch(); -- 2.39.5