From: John Spray Date: Sat, 12 Mar 2016 18:01:29 +0000 (+0000) Subject: mds: fix FSMap upgrade on mixed mon versions X-Git-Tag: v10.1.0~62^2^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=bdcff151d2cd74eeadbc08e7c9317b4357feba01;p=ceph.git mds: fix FSMap upgrade on mixed mon versions The upgrade path was asserting that FSMap::filesystems was empty. This would be violated if FSMap was initially loaded from disk in old format, and then also received off the network (but with a newer epoch) in old format. Signed-off-by: John Spray --- diff --git a/src/mds/FSMap.cc b/src/mds/FSMap.cc index 7cb6277b03e0..cf8c7aed30aa 100644 --- a/src/mds/FSMap.cc +++ b/src/mds/FSMap.cc @@ -326,8 +326,14 @@ void FSMap::decode(bufferlist::iterator& p) } // We're upgrading, populate filesystems from the legacy fields - assert(filesystems.empty()); + filesystems.clear(); + standby_daemons.clear(); + standby_epochs.clear(); + mds_roles.clear(); + compat = legacy_mds_map.compat; + enable_multiple = false; + // Synthesise a Filesystem from legacy_mds_map, if enabled if (legacy_mds_map.enabled) { // Construct a Filesystem from the legacy MDSMap auto migrate_fs = std::make_shared(); @@ -355,9 +361,6 @@ void FSMap::decode(bufferlist::iterator& p) } else { legacy_client_fscid = FS_CLUSTER_ID_NONE; } - - compat = legacy_mds_map.compat; - enable_multiple = false; } else { ::decode(epoch, p); ::decode(next_filesystem_id, p);