return le;
}
+void MDCache::dump_resolve_status(Formatter *f) const
+{
+ f->open_object_section("resolve_status");
+ f->dump_stream("resolve_gather") << resolve_gather;
+ f->dump_stream("resolve_ack_gather") << resolve_gather;
+ f->close_section();
+}
void MDCache::resolve_start(MDSInternalContext *resolve_done_)
{
* after recovery.
*/
+void MDCache::dump_rejoin_status(Formatter *f) const
+{
+ f->open_object_section("rejoin_status");
+ f->dump_stream("rejoin_gather") << rejoin_gather;
+ f->dump_stream("rejoin_ack_gather") << rejoin_ack_gather;
+ f->dump_unsigned("num_opening_inodes", cap_imports_num_opening);
+ f->close_section();
+}
+
void MDCache::rejoin_start(MDSInternalContext *rejoin_done_)
{
dout(10) << "rejoin_start" << dendl;
void dump_cache(const std::string &filename);
void dump_cache(Formatter *f);
+ void dump_resolve_status(Formatter *f) const;
+ void dump_rejoin_status(Formatter *f) const;
+
// == crap fns ==
public:
void show_cache();
} else
dout(20) << " removed no segments!" << dendl;
}
+
+void MDLog::dump_replay_status(Formatter *f) const
+{
+ f->open_object_section("replay_status");
+ f->dump_unsigned("journal_read_pos", journaler ? journaler->get_read_pos() : 0);
+ f->dump_unsigned("journal_write_pos", journaler ? journaler->get_write_pos() : 0);
+ f->dump_unsigned("journal_expire_pos", journaler ? journaler->get_expire_pos() : 0);
+ f->dump_unsigned("num_events", get_num_events());
+ f->dump_unsigned("num_segments", get_num_segments());
+ f->close_section();
+}
void replay(MDSInternalContextBase *onfinish);
void standby_trim_segments();
+
+ void dump_replay_status(Formatter *f) const;
};
#endif
Formatter *f = Formatter::create(format, "json-pretty", "json-pretty");
bool handled = false;
if (command == "status") {
- const OSDMap *osdmap = objecter->get_osdmap_read();
- const epoch_t osd_epoch = osdmap->get_epoch();
- objecter->put_osdmap_read();
-
- f->open_object_section("status");
- f->dump_stream("cluster_fsid") << monc->get_fsid();
- if (mds_rank) {
- f->dump_unsigned("whoami", mds_rank->get_nodeid());
- } else {
- f->dump_unsigned("whoami", MDS_RANK_NONE);
- }
-
- f->dump_string("state", ceph_mds_state_name(mdsmap->get_state_gid(mds_gid_t(
- monc->get_global_id()))));
- f->dump_unsigned("mdsmap_epoch", mdsmap->get_epoch());
- f->dump_unsigned("osdmap_epoch", osd_epoch);
- if (mds_rank) {
- f->dump_unsigned("osdmap_epoch_barrier", mds_rank->get_osd_epoch_barrier());
- } else {
- f->dump_unsigned("osdmap_epoch_barrier", 0);
- }
- f->close_section(); // status
+ dump_status(f);
handled = true;
} else {
if (mds_rank == NULL) {
return handled;
}
+void MDSDaemon::dump_status(Formatter *f)
+{
+ const OSDMap *osdmap = objecter->get_osdmap_read();
+ const epoch_t osd_epoch = osdmap->get_epoch();
+ objecter->put_osdmap_read();
+
+ f->open_object_section("status");
+ f->dump_stream("cluster_fsid") << monc->get_fsid();
+ if (mds_rank) {
+ f->dump_unsigned("whoami", mds_rank->get_nodeid());
+ } else {
+ f->dump_unsigned("whoami", MDS_RANK_NONE);
+ }
+
+ f->dump_string("want_state", ceph_mds_state_name(beacon.get_want_state()));
+ f->dump_string("state", ceph_mds_state_name(mdsmap->get_state_gid(mds_gid_t(
+ monc->get_global_id()))));
+ if (mds_rank) {
+ Mutex::Locker l(mds_lock);
+ mds_rank->dump_status(f);
+ }
+
+ f->dump_unsigned("mdsmap_epoch", mdsmap->get_epoch());
+ f->dump_unsigned("osdmap_epoch", osd_epoch);
+ if (mds_rank) {
+ f->dump_unsigned("osdmap_epoch_barrier", mds_rank->get_osd_epoch_barrier());
+ } else {
+ f->dump_unsigned("osdmap_epoch_barrier", 0);
+ }
+ f->close_section(); // status
+}
+
void MDSDaemon::set_up_admin_socket()
{
int r;
// admin socket handling
friend class MDSSocketHook;
class MDSSocketHook *asok_hook;
- bool asok_command(string command, cmdmap_t& cmdmap, string format,
- ostream& ss);
void set_up_admin_socket();
void clean_up_admin_socket();
void check_ops_in_flight(); // send off any slow ops to monitor
+ bool asok_command(string command, cmdmap_t& cmdmap, string format,
+ ostream& ss);
+
+ void dump_status(Formatter *f);
/**
* Terminate this daemon process.
return true;
}
+void MDSRank::dump_status(Formatter *f) const
+{
+ if (state == MDSMap::STATE_REPLAY ||
+ state == MDSMap::STATE_STANDBY_REPLAY) {
+ mdlog->dump_replay_status(f);
+ } else if (state == MDSMap::STATE_RESOLVE) {
+ mdcache->dump_resolve_status(f);
+ } else if (state == MDSMap::STATE_RECONNECT) {
+ server->dump_reconnect_status(f);
+ } else if (state == MDSMap::STATE_REJOIN) {
+ mdcache->dump_rejoin_status(f);
+ } else if (state == MDSMap::STATE_CLIENTREPLAY) {
+ dump_clientreplay_status(f);
+ }
+}
+
+void MDSRank::dump_clientreplay_status(Formatter *f) const
+{
+ f->open_object_section("clientreplay_status");
+ f->dump_unsigned("clientreplay_queue", replay_queue.size());
+ f->dump_unsigned("active_replay", mdcache->get_num_client_requests());
+ f->close_section();
+}
+
void MDSRankDispatcher::update_log_config()
{
map<string,string> log_to_monitors;
int get_req_rate() { return logger->get(l_mds_request); }
+ void dump_status(Formatter *f) const;
+
protected:
+ void dump_clientreplay_status(Formatter *f) const;
void command_scrub_path(Formatter *f, const string& path);
void command_tag_path(Formatter *f, const string& path,
const string &tag);
CDir *_command_dirfrag_get(
const cmdmap_t &cmdmap,
std::ostream &ss);
- // <<<
protected:
Messenger *messenger;
{
return client_reconnect_gather.count(c) > 0;
}
+
+void Server::dump_reconnect_status(Formatter *f) const
+{
+ f->open_object_section("reconnect_status");
+ f->dump_stream("client_reconnect_gather") << client_reconnect_gather;
+ f->close_section();
+}
utime_t reconnect_start;
set<client_t> client_reconnect_gather; // clients i need a reconnect msg from.
bool waiting_for_reconnect(client_t c) const;
+ void dump_reconnect_status(Formatter *f) const;
Session *get_session(Message *m);
void handle_client_session(class MClientSession *m);