From: Yan, Zheng Date: Thu, 19 Apr 2018 02:15:23 +0000 (+0800) Subject: mon: fix standby replay in multimds setup X-Git-Tag: v12.2.6~24^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=74a33d17edc6afd12095fbffe7713a278a4cd398;p=ceph.git 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 (cherry picked from commit 8d40e21de0a115cc92e4da04ec61a34ac59145e1) --- diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 68f1e7ccc3ec..6db751d50b6b 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -2226,6 +2226,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) { @@ -2237,12 +2238,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; + } } } }