ceph: track laggy state of mds from mdsmap
Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
parent
cd84db6e40
commit
0deb01c999
|
@ -2377,9 +2377,11 @@ static void check_new_map(struct ceph_mds_client *mdsc,
|
||||||
oldstate = ceph_mdsmap_get_state(oldmap, i);
|
oldstate = ceph_mdsmap_get_state(oldmap, i);
|
||||||
newstate = ceph_mdsmap_get_state(newmap, i);
|
newstate = ceph_mdsmap_get_state(newmap, i);
|
||||||
|
|
||||||
dout("check_new_map mds%d state %s -> %s (session %s)\n",
|
dout("check_new_map mds%d state %s%s -> %s%s (session %s)\n",
|
||||||
i, ceph_mds_state_name(oldstate),
|
i, ceph_mds_state_name(oldstate),
|
||||||
|
ceph_mdsmap_is_laggy(oldmap, i) ? " (laggy)" : "",
|
||||||
ceph_mds_state_name(newstate),
|
ceph_mds_state_name(newstate),
|
||||||
|
ceph_mdsmap_is_laggy(newmap, i) ? " (laggy)" : "",
|
||||||
session_state_name(s->s_state));
|
session_state_name(s->s_state));
|
||||||
|
|
||||||
if (memcmp(ceph_mdsmap_get_addr(oldmap, i),
|
if (memcmp(ceph_mdsmap_get_addr(oldmap, i),
|
||||||
|
|
|
@ -85,6 +85,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
|
||||||
struct ceph_entity_addr addr;
|
struct ceph_entity_addr addr;
|
||||||
u32 num_export_targets;
|
u32 num_export_targets;
|
||||||
void *pexport_targets = NULL;
|
void *pexport_targets = NULL;
|
||||||
|
struct ceph_timespec laggy_since;
|
||||||
|
|
||||||
ceph_decode_need(p, end, sizeof(u64)*2 + 1 + sizeof(u32), bad);
|
ceph_decode_need(p, end, sizeof(u64)*2 + 1 + sizeof(u32), bad);
|
||||||
global_id = ceph_decode_64(p);
|
global_id = ceph_decode_64(p);
|
||||||
|
@ -103,7 +104,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
|
||||||
state_seq = ceph_decode_64(p);
|
state_seq = ceph_decode_64(p);
|
||||||
ceph_decode_copy(p, &addr, sizeof(addr));
|
ceph_decode_copy(p, &addr, sizeof(addr));
|
||||||
ceph_decode_addr(&addr);
|
ceph_decode_addr(&addr);
|
||||||
*p += sizeof(struct ceph_timespec);
|
ceph_decode_copy(p, &laggy_since, sizeof(laggy_since));
|
||||||
*p += sizeof(u32);
|
*p += sizeof(u32);
|
||||||
ceph_decode_32_safe(p, end, namelen, bad);
|
ceph_decode_32_safe(p, end, namelen, bad);
|
||||||
*p += namelen;
|
*p += namelen;
|
||||||
|
@ -122,6 +123,9 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
|
||||||
m->m_info[mds].global_id = global_id;
|
m->m_info[mds].global_id = global_id;
|
||||||
m->m_info[mds].state = state;
|
m->m_info[mds].state = state;
|
||||||
m->m_info[mds].addr = addr;
|
m->m_info[mds].addr = addr;
|
||||||
|
m->m_info[mds].laggy =
|
||||||
|
(laggy_since.tv_sec != 0 ||
|
||||||
|
laggy_since.tv_nsec != 0);
|
||||||
m->m_info[mds].num_export_targets = num_export_targets;
|
m->m_info[mds].num_export_targets = num_export_targets;
|
||||||
if (num_export_targets) {
|
if (num_export_targets) {
|
||||||
m->m_info[mds].export_targets =
|
m->m_info[mds].export_targets =
|
||||||
|
|
|
@ -13,6 +13,7 @@ struct ceph_mds_info {
|
||||||
struct ceph_entity_addr addr;
|
struct ceph_entity_addr addr;
|
||||||
s32 state;
|
s32 state;
|
||||||
int num_export_targets;
|
int num_export_targets;
|
||||||
|
bool laggy;
|
||||||
u32 *export_targets;
|
u32 *export_targets;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -47,6 +48,13 @@ static inline int ceph_mdsmap_get_state(struct ceph_mdsmap *m, int w)
|
||||||
return m->m_info[w].state;
|
return m->m_info[w].state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline bool ceph_mdsmap_is_laggy(struct ceph_mdsmap *m, int w)
|
||||||
|
{
|
||||||
|
if (w >= 0 && w < m->m_max_mds)
|
||||||
|
return m->m_info[w].laggy;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m);
|
extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m);
|
||||||
extern struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end);
|
extern struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end);
|
||||||
extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m);
|
extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m);
|
||||||
|
|
Loading…
Reference in a new issue