m_cluster.reset();
}
+void FSMirror::reopen_logs() {
+ std::scoped_lock locker(m_lock);
+
+ if (m_cluster) {
+ reinterpret_cast<CephContext *>(m_cluster->cct())->reopen_logs();
+ }
+ for (auto &[peer, replayer] : m_peer_replayers) {
+ replayer->reopen_logs();
+ }
+}
+
void FSMirror::init(Context *on_finish) {
dout(20) << dendl;
// admin socket helpers
void mirror_status(Formatter *f);
+ void reopen_logs();
+
private:
bool is_blocklisted(const std::scoped_lock<ceph::mutex> &locker) const {
bool blocklisted = false;
void Mirror::shutdown() {
dout(20) << dendl;
-
- std::unique_lock locker(m_lock);
m_stopping = true;
m_cond.notify_all();
}
+void Mirror::reopen_logs() {
+ for (auto &[filesystem, mirror_action] : m_mirror_actions) {
+ mirror_action.fs_mirror->reopen_logs();
+ }
+ g_ceph_context->reopen_logs();
+}
+
void Mirror::handle_signal(int signum) {
dout(10) << ": signal=" << signum << dendl;
- ceph_assert(signum == SIGTERM || signum == SIGINT);
- shutdown();
+
+ std::scoped_lock locker(m_lock);
+ switch (signum) {
+ case SIGHUP:
+ reopen_logs();
+ break;
+ case SIGINT:
+ case SIGTERM:
+ shutdown();
+ break;
+ default:
+ ceph_abort_msgf("unexpected signal %d", signum);
+ }
}
void Mirror::handle_enable_mirroring(const Filesystem &filesystem,
void schedule_mirror_update_task();
void update_fs_mirrors();
+
+ void reopen_logs();
};
} // namespace mirror
f->close_section(); // stats
}
+void PeerReplayer::reopen_logs() {
+ std::scoped_lock locker(m_lock);
+
+ if (m_remote_cluster) {
+ reinterpret_cast<CephContext *>(m_remote_cluster->cct())->reopen_logs();
+ }
+}
+
} // namespace mirror
} // namespace cephfs
// admin socket helpers
void peer_status(Formatter *f);
+ // reopen logs
+ void reopen_logs();
+
private:
inline static const std::string PRIMARY_SNAP_ID_KEY = "primary_snap_id";
}
init_async_signal_handler();
+ register_async_signal_handler(SIGHUP, handle_signal);
register_async_signal_handler_oneshot(SIGINT, handle_signal);
register_async_signal_handler_oneshot(SIGTERM, handle_signal);
msgr->wait();
delete msgr;
+ unregister_async_signal_handler(SIGHUP, handle_signal);
unregister_async_signal_handler(SIGINT, handle_signal);
unregister_async_signal_handler(SIGTERM, handle_signal);
shutdown_async_signal_handler();