From: Jos Collin Date: Fri, 23 Jun 2023 06:16:26 +0000 (+0530) Subject: mds: MDLog::_recovery_thread: handle the errors gracefully X-Git-Tag: v16.2.14~33^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F52513%2Fhead;p=ceph.git mds: MDLog::_recovery_thread: handle the errors gracefully A write fails if the MDS is already blocklisted due to the 'fs fail' issued by the qa tests. Handle those write failures gracefully, even when the MDS is stopping. Fixes: https://tracker.ceph.com/issues/61201 Signed-off-by: Jos Collin (cherry picked from commit d562905dcfb5b8a45ce7042c543720ef8b0fa05b) --- diff --git a/src/mds/MDLog.cc b/src/mds/MDLog.cc index 05f815c8ef48..2e133f650d31 100644 --- a/src/mds/MDLog.cc +++ b/src/mds/MDLog.cc @@ -975,8 +975,14 @@ void MDLog::_recovery_thread(MDSContext *completion) inodeno_t const default_log_ino = MDS_INO_LOG_OFFSET + mds->get_nodeid(); jp.front = default_log_ino; int write_result = jp.save(mds->objecter); - // Nothing graceful we can do for this - ceph_assert(write_result >= 0); + if (write_result < 0) { + std::lock_guard l(mds->mds_lock); + if (mds->is_daemon_stopping()) { + return; + } + mds->damaged(); + ceph_abort(); // damaged should never return + } } else if (read_result == -CEPHFS_EBLOCKLISTED) { derr << "Blocklisted during JournalPointer read! Respawning..." << dendl; mds->respawn();