From: Venky Shankar Date: Thu, 28 Jan 2021 08:52:48 +0000 (-0500) Subject: cephfs-mirror: shutdown filesystem/cluster connections on shutdown X-Git-Tag: v17.1.0~2889^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2bb940fba2368b421fa37cd13e694e0ee15d5f8a;p=ceph.git cephfs-mirror: shutdown filesystem/cluster connections on shutdown Signed-off-by: Venky Shankar --- diff --git a/src/tools/cephfs_mirror/FSMirror.cc b/src/tools/cephfs_mirror/FSMirror.cc index 39bae6a5cb2c..7f2211a95f47 100644 --- a/src/tools/cephfs_mirror/FSMirror.cc +++ b/src/tools/cephfs_mirror/FSMirror.cc @@ -173,13 +173,12 @@ void FSMirror::shutdown(Context *on_finish) { if (m_on_init_finish != nullptr) { dout(10) << ": delaying shutdown -- init in progress" << dendl; m_on_shutdown_finish = new LambdaContext([this, on_finish](int r) { - cleanup(); if (r < 0) { on_finish->complete(0); return; } m_on_shutdown_finish = on_finish; - shutdown_mirror_watcher(); + shutdown_peer_replayers(); }); return; } @@ -187,11 +186,18 @@ void FSMirror::shutdown(Context *on_finish) { m_on_shutdown_finish = on_finish; } + shutdown_peer_replayers(); +} + +void FSMirror::shutdown_peer_replayers() { + dout(20) << dendl; + for (auto &[peer, peer_replayer] : m_peer_replayers) { - dout(5) << ": shutting down replayer for peer=" << peer << dendl; - shutdown_replayer(peer_replayer.get()); + dout(5) << ": shutting down replayer for peer=" << peer << dendl; + shutdown_replayer(peer_replayer.get()); } m_peer_replayers.clear(); + shutdown_mirror_watcher(); } @@ -287,12 +293,14 @@ void FSMirror::shutdown_instance_watcher() { std::scoped_lock locker(m_lock); Context *ctx = new C_CallbackAdapter< FSMirror, &FSMirror::handle_shutdown_instance_watcher>(this); - m_instance_watcher->shutdown(ctx); + m_instance_watcher->shutdown(new C_AsyncCallback(m_work_queue, ctx)); } void FSMirror::handle_shutdown_instance_watcher(int r) { dout(20) << ": r=" << r << dendl; + cleanup(); + Context *on_init_finish = nullptr; Context *on_shutdown_finish = nullptr; diff --git a/src/tools/cephfs_mirror/FSMirror.h b/src/tools/cephfs_mirror/FSMirror.h index f7939c143b79..25aa97e863f9 100644 --- a/src/tools/cephfs_mirror/FSMirror.h +++ b/src/tools/cephfs_mirror/FSMirror.h @@ -128,6 +128,8 @@ private: void init_mirror_watcher(); void handle_init_mirror_watcher(int r); + void shutdown_peer_replayers(); + void shutdown_mirror_watcher(); void handle_shutdown_mirror_watcher(int r);