From 9de077dabb72f74153fc2510795669c82bd6a6f3 Mon Sep 17 00:00:00 2001 From: Nitzan Mordechai Date: Thu, 1 Jun 2023 09:30:48 +0000 Subject: [PATCH] mon/Monitor: during shutdown don't accept new authentication and create new sessions During shutdown, the monitor is designed not to accept new authentication requests or create new sessions. However, a problem arises when the monitor marks its status as "shutdown" but still accepts new authentication requests and creates new sessions. This issue causes the monitor to fail when checking the session list. To fix this problem, an update is implemented. With this fix, a monitor in the "shutdown" state will correctly reject new authentication requests and prevent the creation of new sessions. This ensures that the monitor operates as intended during the shutdown process. Fixes: https://tracker.ceph.com/issues/56192 Signed-off-by: Nitzan Mordechai (cherry picked from commit 4a8c21e3763dad41555765143f4b76f3a543b4f4) --- src/mon/Monitor.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index c26dc1ae149ea..58f436e9fce04 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -282,7 +282,6 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s, Monitor::~Monitor() { op_tracker.on_shutdown(); - delete logger; ceph_assert(session_map.sessions.empty()); } @@ -6523,6 +6522,11 @@ int Monitor::ms_handle_fast_authentication(Connection *con) MonSession *s = static_cast(priv.get()); if (!s) { // must be msgr2, otherwise dispatch would have set up the session. + if (state == STATE_SHUTDOWN) { + dout(10) << __func__ << " ignoring new con " << con << " (shutdown)" << dendl; + con->mark_down(); + return -EACCES; + } s = session_map.new_session( entity_name_t(con->get_peer_type(), -1), // we don't know yet con->get_peer_addrs(), -- 2.39.5