mirror of
https://github.com/ceph/ceph
synced 2025-01-29 22:43:40 +00:00
Merge pull request #34024 from vshankar/wip-ignore-mgrmap-when-laggy
mds: do not defer incoming mgrmap when mds is laggy Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
This commit is contained in:
commit
fb1fdf4d55
@ -904,6 +904,17 @@ bool MDSDaemon::ms_dispatch2(const ref_t<Message> &m)
|
||||
/*
|
||||
* high priority messages we always process
|
||||
*/
|
||||
|
||||
#define ALLOW_MESSAGES_FROM(peers) \
|
||||
do { \
|
||||
if (m->get_connection() && (m->get_connection()->get_peer_type() & (peers)) == 0) { \
|
||||
dout(0) << __FILE__ << "." << __LINE__ << ": filtered out request, peer=" \
|
||||
<< m->get_connection()->get_peer_type() << " allowing=" \
|
||||
<< #peers << " message=" << *m << dendl; \
|
||||
return true; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
bool MDSDaemon::handle_core_message(const cref_t<Message> &m)
|
||||
{
|
||||
switch (m->get_type()) {
|
||||
|
@ -1010,6 +1010,10 @@ bool MDSRank::_dispatch(const cref_t<Message> &m, bool new_msg)
|
||||
if (is_stale_message(m)) {
|
||||
return true;
|
||||
}
|
||||
// do not proceed if this message cannot be handled
|
||||
if (!is_valid_message(m)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (beacon.is_laggy()) {
|
||||
dout(5) << " laggy, deferring " << *m << dendl;
|
||||
@ -1018,10 +1022,7 @@ bool MDSRank::_dispatch(const cref_t<Message> &m, bool new_msg)
|
||||
dout(5) << " there are deferred messages, deferring " << *m << dendl;
|
||||
waiting_for_nolaggy.push_back(m);
|
||||
} else {
|
||||
if (!handle_deferrable_message(m)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
handle_message(m);
|
||||
heartbeat_reset();
|
||||
}
|
||||
|
||||
@ -1132,10 +1133,45 @@ void MDSRank::update_mlogger()
|
||||
}
|
||||
}
|
||||
|
||||
// message types that the mds can handle
|
||||
bool MDSRank::is_valid_message(const cref_t<Message> &m) {
|
||||
int port = m->get_type() & 0xff00;
|
||||
int type = m->get_type();
|
||||
|
||||
if (port == MDS_PORT_CACHE ||
|
||||
port == MDS_PORT_MIGRATOR ||
|
||||
type == CEPH_MSG_CLIENT_SESSION ||
|
||||
type == CEPH_MSG_CLIENT_RECONNECT ||
|
||||
type == CEPH_MSG_CLIENT_RECLAIM ||
|
||||
type == CEPH_MSG_CLIENT_REQUEST ||
|
||||
type == MSG_MDS_SLAVE_REQUEST ||
|
||||
type == MSG_MDS_HEARTBEAT ||
|
||||
type == MSG_MDS_TABLE_REQUEST ||
|
||||
type == MSG_MDS_LOCK ||
|
||||
type == MSG_MDS_INODEFILECAPS ||
|
||||
type == CEPH_MSG_CLIENT_CAPS ||
|
||||
type == CEPH_MSG_CLIENT_CAPRELEASE ||
|
||||
type == CEPH_MSG_CLIENT_LEASE) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* lower priority messages we defer if we seem laggy
|
||||
*/
|
||||
bool MDSRank::handle_deferrable_message(const cref_t<Message> &m)
|
||||
|
||||
#define ALLOW_MESSAGES_FROM(peers) \
|
||||
do { \
|
||||
if (m->get_connection() && (m->get_connection()->get_peer_type() & (peers)) == 0) { \
|
||||
dout(0) << __FILE__ << "." << __LINE__ << ": filtered out request, peer=" << m->get_connection()->get_peer_type() \
|
||||
<< " allowing=" << #peers << " message=" << *m << dendl; \
|
||||
return; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
void MDSRank::handle_message(const cref_t<Message> &m)
|
||||
{
|
||||
int port = m->get_type() & 0xff00;
|
||||
|
||||
@ -1199,11 +1235,9 @@ bool MDSRank::handle_deferrable_message(const cref_t<Message> &m)
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
derr << "unrecogonized message " << *m << dendl;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -1239,9 +1273,8 @@ void MDSRank::_advance_queues()
|
||||
|
||||
if (!is_stale_message(old)) {
|
||||
dout(7) << " processing laggy deferred " << *old << dendl;
|
||||
if (!handle_deferrable_message(old)) {
|
||||
dout(0) << "unrecognized message " << *old << dendl;
|
||||
}
|
||||
ceph_assert(is_valid_message(old));
|
||||
handle_message(old);
|
||||
}
|
||||
|
||||
heartbeat_reset();
|
||||
|
@ -421,7 +421,8 @@ class MDSRank {
|
||||
void inc_dispatch_depth() { ++dispatch_depth; }
|
||||
void dec_dispatch_depth() { --dispatch_depth; }
|
||||
void retry_dispatch(const cref_t<Message> &m);
|
||||
bool handle_deferrable_message(const cref_t<Message> &m);
|
||||
bool is_valid_message(const cref_t<Message> &m);
|
||||
void handle_message(const cref_t<Message> &m);
|
||||
void _advance_queues();
|
||||
bool _dispatch(const cref_t<Message> &m, bool new_msg);
|
||||
bool is_stale_message(const cref_t<Message> &m) const;
|
||||
@ -653,15 +654,5 @@ public:
|
||||
bool ms_dispatch(const cref_t<Message> &m);
|
||||
};
|
||||
|
||||
// This utility for MDS and MDSRank dispatchers.
|
||||
#define ALLOW_MESSAGES_FROM(peers) \
|
||||
do { \
|
||||
if (m->get_connection() && (m->get_connection()->get_peer_type() & (peers)) == 0) { \
|
||||
dout(0) << __FILE__ << "." << __LINE__ << ": filtered out request, peer=" << m->get_connection()->get_peer_type() \
|
||||
<< " allowing=" << #peers << " message=" << *m << dendl; \
|
||||
return true; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#endif // MDS_RANK_H_
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user