]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: Don't blocklist the clients in any replay state 47110/head
authorKotresh HR <khiremat@redhat.com>
Fri, 24 Jun 2022 07:17:57 +0000 (12:47 +0530)
committerKotresh HR <khiremat@redhat.com>
Thu, 11 Aug 2022 07:59:09 +0000 (13:29 +0530)
The mds in 'standby-replay' state should not blocklist clients.
Attempting to do so would hit an assert while journaling.

Before the commit 79f7576 the 'Server:apply_blocklist' used to
fetch the blocklist addresses from 'Objecter::consume_blocklist_events'
which returns blocklist addresses only if 'blocklist_events_enabled'
are enabled. This is not enabled for mds in 'standby-replay' state.
Hence this issue wasn't seen.

After the commit 79f7576 the 'Server::apply_blocklist' fetches the
blocklist addresses from the osdmap. This would return the blocklist
addresses irrespective of the mds state. The mds in 'replay' state
doesn't blocklist the clients but if the mds is in 'standby-replay'
state, it tries to journal the blocklist and asserts. This patch
fixes the same by not allowing the blocklist if the mds is in any
replay state.

Introduced-by: 79f7576401cc9d857f84396314d7476336c0e271
Fixes: https://tracker.ceph.com/issues/56012
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 733fb72acfeb79adbb26166ca13b1e5927cd6547)

src/mds/MDSRank.cc

index 1199a65397cf6ddd92b1f6c6d0ec4d19233dfcbf..980ecd51eba2a79f00bd9a737bdb9f85c45a66a9 100644 (file)
@@ -3506,7 +3506,7 @@ void MDSRankDispatcher::handle_osd_map()
   // reconnect state will journal blocklisted clients (journal
   // is opened for writing in `replay_done` before moving to
   // up:resolve).
-  if (!is_replay()) {
+  if (!is_any_replay()) {
     std::set<entity_addr_t> newly_blocklisted;
     objecter->consume_blocklist_events(&newly_blocklisted);
     auto epoch = objecter->with_osdmap([](const OSDMap &o){return o.get_epoch();});