From 8d40e21de0a115cc92e4da04ec61a34ac59145e1 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Thu, 19 Apr 2018 10:15:23 +0800 Subject: [PATCH] mon: fix standby replay in multimds setup The code should break loops for two level. otherwise, in multimds setup, a standby mds may get assigned to standby replay multiple times. This bug may cause monitor to crash. Signed-off-by: "Yan, Zheng" Fixes: http://tracker.ceph.com/issues/23658 --- src/mon/MDSMonitor.cc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 7c213e022d1..81989c2d76d 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -1970,6 +1970,7 @@ bool MDSMonitor::maybe_promote_standby(std::shared_ptr &fs) // check everyone for (const auto &p : pending.filesystems) { + bool assigned = false; const auto &fs = p.second; const MDSMap &mds_map = fs->mds_map; for (const auto &mds_i : mds_map.mds_info) { @@ -1981,12 +1982,15 @@ bool MDSMonitor::maybe_promote_standby(std::shared_ptr &fs) } if (try_standby_replay(info, *fs, cand_info)) { - do_propose = true; + assigned = true; break; } - continue; } } + if (assigned) { + do_propose = true; + break; + } } } } -- 2.47.3