]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tools/cephfs_mirror: only perform actions if init succeed 52524/head
authorDhairya Parmar <dparmar@redhat.com>
Wed, 2 Aug 2023 07:42:19 +0000 (13:12 +0530)
committerDhairya Parmar <dparmar@redhat.com>
Tue, 8 Aug 2023 10:15:56 +0000 (15:45 +0530)
address non-zero return code first and then perform further
actions.

Fixes: https://tracker.ceph.com/issues/62357
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
src/tools/cephfs_mirror/Mirror.cc

index 890805764c048d86ecb26c817add6aaaf6e5d9af..3afcf6b9272b5fc955edd19400136c7af363fefd 100644 (file)
@@ -319,19 +319,24 @@ void Mirror::handle_enable_mirroring(const Filesystem &filesystem,
 
   std::scoped_lock locker(m_lock);
   auto &mirror_action = m_mirror_actions.at(filesystem);
-  ceph_assert(mirror_action.action_in_progress);
 
-  mirror_action.action_in_progress = false;
-  m_cond.notify_all();
   if (r < 0) {
     derr << ": failed to initialize FSMirror for filesystem=" << filesystem
          << ": " << cpp_strerror(r) << dendl;
+    // since init failed, don't assert, just unset it directly
+    mirror_action.action_in_progress = false;
+    m_cond.notify_all();
     m_service_daemon->add_or_update_fs_attribute(filesystem.fscid,
                                                  SERVICE_DAEMON_MIRROR_ENABLE_FAILED_KEY,
                                                  true);
     return;
   }
 
+  ceph_assert(mirror_action.action_in_progress);
+
+  mirror_action.action_in_progress = false;
+  m_cond.notify_all();
+
   for (auto &peer : peers) {
     mirror_action.fs_mirror->add_peer(peer);
   }
@@ -344,19 +349,24 @@ void Mirror::handle_enable_mirroring(const Filesystem &filesystem, int r) {
 
   std::scoped_lock locker(m_lock);
   auto &mirror_action = m_mirror_actions.at(filesystem);
-  ceph_assert(mirror_action.action_in_progress);
-
-  mirror_action.action_in_progress = false;
-  m_cond.notify_all();
+  
   if (r < 0) {
     derr << ": failed to initialize FSMirror for filesystem=" << filesystem
          << ": " << cpp_strerror(r) << dendl;
+    // since init failed, don't assert, just unset it directly
+    mirror_action.action_in_progress = false;
+    m_cond.notify_all();
     m_service_daemon->add_or_update_fs_attribute(filesystem.fscid,
                                                  SERVICE_DAEMON_MIRROR_ENABLE_FAILED_KEY,
                                                  true);
     return;
   }
 
+  ceph_assert(mirror_action.action_in_progress);
+
+  mirror_action.action_in_progress = false;
+  m_cond.notify_all();
+
   dout(10) << ": Initialized FSMirror for filesystem=" << filesystem << dendl;
 }