]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: MDLog::_recovery_thread: handle the errors gracefully 52514/head
authorJos Collin <jcollin@redhat.com>
Fri, 23 Jun 2023 06:16:26 +0000 (11:46 +0530)
committerJos Collin <jcollin@redhat.com>
Wed, 26 Jul 2023 04:32:21 +0000 (10:02 +0530)
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 <jcollin@redhat.com>
(cherry picked from commit d562905dcfb5b8a45ce7042c543720ef8b0fa05b)

src/mds/MDLog.cc

index 337c1025a3cbc7586ee683ee6fa0cabde186cc45..b1c8b22d8c45168160e920b27c45bccff4745f0f 100644 (file)
@@ -977,8 +977,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();