}
}
+void FSMap::print_daemon_summary(ostream& out) const
+{
+ // this appears in the "services:" section of "ceph status"
+ int num_up = 0, num_in = 0, num_failed = 0;
+ int num_standby_replay = 0;
+ for (auto& [fscid, fs] : filesystems) {
+ num_up += fs->mds_map.get_num_up_mds();
+ num_in += fs->mds_map.get_num_in_mds();
+ num_failed += fs->mds_map.get_num_failed_mds();
+ num_standby_replay += fs->mds_map.get_num_standby_replay_mds();
+ }
+ int num_standby = standby_daemons.size();
+ out << num_up << "/" << num_in << " daemons up";
+ if (num_failed) {
+ out << " (" << num_failed << " failed)";
+ }
+ if (num_standby) {
+ out << ", " << num_standby << " standby";
+ }
+ if (num_standby_replay) {
+ out << ", " << num_standby_replay << " hot standby";
+ }
+}
+
void FSMap::print_fs_summary(ostream& out) const
{
+ // this appears in the "data:" section of "ceph status"
if (!filesystems.empty()) {
int num_failed = 0, num_recovering = 0, num_stopped = 0, num_healthy = 0;
int num_damaged = 0;
void print(std::ostream& out) const;
void print_summary(ceph::Formatter *f, std::ostream *out) const;
+ void print_daemon_summary(std::ostream& out) const;
void print_fs_summary(std::ostream& out) const;
void dump(ceph::Formatter *f) const;
int get_num_failed_mds() const {
return failed.size();
}
+ unsigned get_num_standby_replay_mds() const {
+ unsigned num = 0;
+ for (auto& i : mds_info) {
+ if (i.second.state == MDSMap::STATE_STANDBY_REPLAY) {
+ ++num;
+ }
+ }
+ return num;
+ }
unsigned get_num_mds(int state) const;
// data pools
void add_data_pool(int64_t poolid) {
const FSMap *fsmapp = &fsmap_copy;
if (fsmapp->filesystem_count() > 0 and mdsmon()->should_print_status()){
- ss << " mds: " << spacing << *fsmapp << "\n";
+ ss << " mds: " << spacing;
+ fsmapp->print_daemon_summary(ss);
+ ss << "\n";
}
ss << " osd: " << spacing;