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" <zyan@redhat.com>
Fixes: http://tracker.ceph.com/issues/23658
(cherry picked from commit
8d40e21de0a115cc92e4da04ec61a34ac59145e1)
// 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) {
}
if (try_standby_replay(info, *fs, cand_info)) {
- do_propose = true;
+ assigned = true;
break;
}
- continue;
}
}
+ if (assigned) {
+ do_propose = true;
+ break;
+ }
}
}
}