For legacy librbd clients, sanitize_mons will panic if addrs are not
consistent with mon_info_t.
Signed-off-by: shenjiatong <yshxxsjt715@163.com>
fixes: https://tracker.ceph.com/issues/68743
(cherry picked from commit
14b09519739f3b2dc715647fd0f04dd22c17aeb3)
if (!HAVE_FEATURE(con_features, MONENC) ||
!HAVE_FEATURE(con_features, SERVER_NAUTILUS)) {
for (auto& [name, info] : mon_info) {
- legacy_mon_addr[name] = info.public_addrs.legacy_addr();
+ // see note in mon_info_t::encode()
+ auto addr = info.public_addrs.legacy_addr();
+ if (addr == entity_addr_t()) {
+ addr = info.public_addrs.as_legacy_addr();
+ }
+ legacy_mon_addr[name] = addr;
}
}