From: Sage Weil Date: Thu, 26 Apr 2018 15:31:34 +0000 (-0500) Subject: messages/MOSDMap: fix compat_version for MOSDMap X-Git-Tag: v13.1.0~67^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=579b8edb2ca815729728977b3c04aecf11b6a7cb;p=ceph.git messages/MOSDMap: fix compat_version for MOSDMap Jewel clients see will not decode message of type 41 version 4 because compat_version 4 > supported version 3 The problem is when compat_version == 0 and head_version != 0, we interpret compat_version == head_version. From Message::encode, // if the encoder didn't specify past compatibility, we assume it // is incompatible. if (header.compat_version == 0) header.compat_version = header.version; Broken by 49833c3bb264949b8126796997a95a95b50af411 for the head_version=4 case (compat_version needs to be 3). Signed-off-by: Sage Weil --- diff --git a/src/messages/MOSDMap.h b/src/messages/MOSDMap.h index 27aae15570d53..537c9dd6f6326 100644 --- a/src/messages/MOSDMap.h +++ b/src/messages/MOSDMap.h @@ -96,11 +96,13 @@ public: if (OSDMap::get_significant_features(encode_features) != OSDMap::get_significant_features(features)) { if ((features & CEPH_FEATURE_PGID64) == 0 || - (features & CEPH_FEATURE_PGPOOL3) == 0) + (features & CEPH_FEATURE_PGPOOL3) == 0) { header.version = 1; // old old_client version - else if ((features & CEPH_FEATURE_OSDENC) == 0) + header.compat_version = 1; + } else if ((features & CEPH_FEATURE_OSDENC) == 0) { header.version = 2; // old pg_pool_t - header.compat_version = 0; + header.compat_version = 2; + } // reencode maps using old format //