]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: set session_timeout when adding to session_map 37554/head
authorIlya Dryomov <idryomov@gmail.com>
Tue, 29 Sep 2020 13:29:16 +0000 (15:29 +0200)
committerVicente Cheng <freeze.bilsted@gmail.com>
Mon, 5 Oct 2020 15:46:25 +0000 (15:46 +0000)
With msgr2, the session is added in Monitor::ms_handle_accept()
which is queued by ProtocolV2 at the end of handling CLIENT_IDENT
frame, before responding with SERVER_IDENT frame.  session_timeout
is 0 and gets set only in Monitor::ms_dispatch(), so if the session
trimming code in Monitor::tick() gets to the session before the peer
receives our SERVER_IDENT, handles it, sends the first message and
we receive it, the session is wrongly closed.

This doesn't happen with msgr1, because there the session is added in
Monitor::ms_dispatch(), upon receive of the first message (MSG_AUTH).

Fixes: https://tracker.ceph.com/issues/47697
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 76fbe8b4aaad7f39b37baf2f2d0128e9fe5c29a6)

src/mon/Session.h

index b6d176f50cfdf6f76bc4f8185bb029e6bd1944f2..e1f2835756f0fee8941d13adb58d6bd8507c2ca2 100644 (file)
@@ -162,6 +162,9 @@ struct MonSessionMap {
   }
 
   void add_session(MonSession *s) {
+    s->session_timeout = ceph_clock_now();
+    s->session_timeout += g_conf()->mon_session_timeout;
+
     sessions.push_back(&s->item);
     s->get();
     if (s->name.is_osd() &&