Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0deb01c9 authored by Sage Weil's avatar Sage Weil
Browse files

ceph: track laggy state of mds from mdsmap



Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent cd84db6e
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -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),
+5 −1
Original line number Original line Diff line number Diff line
@@ -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 =
+8 −0
Original line number Original line Diff line number Diff line
@@ -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);