diff options
author | Yehuda Sadeh <yehuda@hq.newdream.net> | 2009-02-12 12:43:17 -0800 |
---|---|---|
committer | Yehuda Sadeh <yehuda@hq.newdream.net> | 2009-02-12 12:43:17 -0800 |
commit | 5dc7beaf16c2f495d3ec08c4982538122221ca0f (patch) | |
tree | c6ac68664925eba4e5c36e4b355ef547571539c7 | |
parent | 172afed5129776d9ee1dc0cb349d3657253d1afe (diff) | |
download | ceph-5dc7beaf16c2f495d3ec08c4982538122221ca0f.tar.gz |
kclient: show some meaningful info in client proc entry
-rw-r--r-- | src/kernel/mdsmap.h | 53 | ||||
-rw-r--r-- | src/kernel/osdmap.h | 24 | ||||
-rw-r--r-- | src/kernel/proc.c | 38 |
3 files changed, 112 insertions, 3 deletions
diff --git a/src/kernel/mdsmap.h b/src/kernel/mdsmap.h index 8defb0c4f49..b50e298402b 100644 --- a/src/kernel/mdsmap.h +++ b/src/kernel/mdsmap.h @@ -34,6 +34,59 @@ static inline int ceph_mdsmap_get_state(struct ceph_mdsmap *m, int w) return m->m_state[w]; } +static inline char *ceph_mdsmap_state_str(int state) +{ + switch (state) { + case CEPH_MDS_STATE_DNE: + return "dne"; + break; + case CEPH_MDS_STATE_STOPPED: + return "stopped"; + break; + case CEPH_MDS_STATE_DESTROYING: + return "destroying"; + break; + case CEPH_MDS_STATE_FAILED: + return "failed"; + break; + case CEPH_MDS_STATE_BOOT: + return "boot"; + break; + case CEPH_MDS_STATE_STANDBY: + return "standby"; + break; + case CEPH_MDS_STATE_CREATING: + return "creating"; + break; + case CEPH_MDS_STATE_STARTING: + return "starting"; + break; + case CEPH_MDS_STATE_STANDBY_REPLAY: + return "standby replay"; + break; + case CEPH_MDS_STATE_REPLAY: + return "replay"; + break; + case CEPH_MDS_STATE_RESOLVE: + return "resolve"; + break; + case CEPH_MDS_STATE_RECONNECT: + return "reconnect"; + break; + case CEPH_MDS_STATE_REJOIN: + return "rejoin"; + break; + case CEPH_MDS_STATE_ACTIVE: + return "active"; + break; + case CEPH_MDS_STATE_STOPPING: + return "stopping"; + break; + } + + return "unknown"; +} + extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m); extern struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end); extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m); diff --git a/src/kernel/osdmap.h b/src/kernel/osdmap.h index db97ca7d91d..22eca126358 100644 --- a/src/kernel/osdmap.h +++ b/src/kernel/osdmap.h @@ -54,6 +54,30 @@ static inline bool ceph_osdmap_flag(struct ceph_osdmap *map, int flag) return map && (map->flags & flag); } +static inline char *ceph_osdmap_state_str(char *str, int len, int state) +{ + int flag = 0; + + if (!len) + goto done; + + *str = '\0'; + if (state) { + if (state & CEPH_OSD_EXISTS) { + snprintf(str, len, "exists"); + flag = 1; + } + if (state & CEPH_OSD_UP) { + snprintf(str, len, "%s%s%s", str, (flag ? ", " : ""), "up"); + flag = 1; + } + } else { + snprintf(str, len, "doesn't exist"); + } +done: + return str; +} + static inline struct ceph_entity_addr *ceph_osd_addr(struct ceph_osdmap *map, int osd) { diff --git a/src/kernel/proc.c b/src/kernel/proc.c index 3e991100214..8e4f1bbbd33 100644 --- a/src/kernel/proc.c +++ b/src/kernel/proc.c @@ -204,9 +204,41 @@ void ceph_proc_cleanup(void) static int ceph_client_data_proc_show(struct seq_file *sf, void *v) { struct ceph_client *client = sf->private; - - seq_printf(sf, "client%d\n", client->whoami); - + int i; + + seq_printf(sf, "Client%d:\n", client->whoami); + seq_printf(sf, "----------\n"); + seq_printf(sf, "mon:\n"); + seq_printf(sf, "\tfsid\t%llx.%llx\n", le64_to_cpu(__ceph_fsid_major(&client->monc.monmap->fsid)), + le64_to_cpu(__ceph_fsid_minor(&client->monc.monmap->fsid))); + seq_printf(sf, "\tepoch\t%d\n", client->monc.monmap->epoch); + + for (i=0; i<client->monc.monmap->num_mon; i++) { + struct ceph_entity_inst *inst = &client->monc.monmap->mon_inst[i]; + seq_printf(sf, "\t%s%d\t%u.%u.%u.%u:%u\n", + ENTITY_NAME(inst->name), + IPQUADPORT(inst->addr.ipaddr)); + } + seq_printf(sf, "mds:\n"); + for (i=0; i<client->mdsc.mdsmap->m_max_mds; i++) { + struct ceph_entity_addr *addr = &client->mdsc.mdsmap->m_addr[i]; + int state = client->mdsc.mdsmap->m_state[i]; + seq_printf(sf, "\tmds%d\t%u.%u.%u.%u:%u\t(%s)\n", + i, + IPQUADPORT(addr->ipaddr), + ceph_mdsmap_state_str(state)); + } + seq_printf(sf, "osd:\n"); + for (i=0; i<client->osdc.osdmap->max_osd; i++) { + struct ceph_entity_addr *addr = &client->osdc.osdmap->osd_addr[i]; + int state = client->osdc.osdmap->osd_state[i]; +#define LARGE_ENOUGH_BUF 16 + char buf[LARGE_ENOUGH_BUF]; + seq_printf(sf, "\tosd%d\t%u.%u.%u.%u:%u\t(%s)\n", + i, + IPQUADPORT(addr->ipaddr), + ceph_osdmap_state_str(buf, sizeof(buf), state)); + } return 0; } |