]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/Monitor: during shutdown don't accept new authentication and create new sessions 51868/head
authorNitzan Mordechai <nmordech@redhat.com>
Thu, 1 Jun 2023 09:30:48 +0000 (09:30 +0000)
committerNitzan Mordechai <nmordech@redhat.com>
Thu, 1 Jun 2023 09:30:52 +0000 (09:30 +0000)
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 <nmordech@redhat.com>
src/mon/Monitor.cc

index 395b07b8babba6ca7ffb0b0c58230c387ad21ed1..9f3ea4a6e489677e1cd888c89e6e229257881454 100644 (file)
@@ -280,7 +280,6 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
 Monitor::~Monitor()
 {
   op_tracker.on_shutdown();
-
   delete logger;
   ceph_assert(session_map.sessions.empty());
 }
@@ -6548,6 +6547,11 @@ int Monitor::ms_handle_authentication(Connection *con)
   MonSession *s = static_cast<MonSession*>(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(),