summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2009-02-12 12:43:17 -0800
committerYehuda Sadeh <yehuda@hq.newdream.net>2009-02-12 12:43:17 -0800
commit5dc7beaf16c2f495d3ec08c4982538122221ca0f (patch)
treec6ac68664925eba4e5c36e4b355ef547571539c7
parent172afed5129776d9ee1dc0cb349d3657253d1afe (diff)
downloadceph-5dc7beaf16c2f495d3ec08c4982538122221ca0f.tar.gz
kclient: show some meaningful info in client proc entry
-rw-r--r--src/kernel/mdsmap.h53
-rw-r--r--src/kernel/osdmap.h24
-rw-r--r--src/kernel/proc.c38
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;
}