]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
mds: do not defer incoming mgrmap when mds is laggy 36038/head
authorVenky Shankar <vshankar@redhat.com>
Wed, 18 Mar 2020 07:25:47 +0000 (03:25 -0400)
committerNathan Cutler <ncutler@suse.com>
Fri, 10 Jul 2020 21:47:22 +0000 (23:47 +0200)
commitb2f533d67bc26262c2362bbcb66db4bfed700c01
treea66a47e160f89062e04c9d7b0df407467e216654
parent690c7ca1a27b11ba119fbc95e96319b1f3233753
mds: do not defer incoming mgrmap when mds is laggy

When the mds is laggy, the incoming mgrmap is queued to be processed
at a later stage. But, the mds does not handle mgrmap message directly.
So, later when the mds is not laggy anymore, the mgrmap message is not
handled and is dropped. But, when the mgrmap message was queued up, the
mds acknowledges that it has handled the message. This causes the mgr
client instance to never process the mgrmap and never connecting to the
manager (the receipt of mgrmap drives the connection to the manager).

The fix is to not acknowledge messages that the mds cannot handle. In
normal cases, the mds does not ack the message but when it's laggy, it
just blindly queues up the message -- so, check if the message can be
handled (later) even when the mds is laggy.

Also, a minor change in a function name -- handle_deferrable_message()
is kind of a misnomer since the function is called to process messages
that are not deferred. That's changed to handle_message() now.

Fixes: http://tracker.ceph.com/issues/44638
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit beb12fa25315153e1a06a0104883de89776438a6)
src/mds/MDSDaemon.cc
src/mds/MDSRank.cc
src/mds/MDSRank.h