]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Make mon addrs consistent with mon info 60750/head
authorshenjiatong <yshxxsjt715@163.com>
Sat, 2 Nov 2024 08:10:38 +0000 (16:10 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 15 Nov 2024 08:49:23 +0000 (09:49 +0100)
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)

src/mon/MonMap.cc

index bb8a4b19455d6c28713006cea7a78f68afb5af28..3dbc3106fe11e57490b5fc5171614891e23977f0 100644 (file)
@@ -175,7 +175,12 @@ void MonMap::encode(ceph::buffer::list& blist, uint64_t con_features) const
   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;
     }
   }