From: Xiaoxi CHEN Date: Mon, 23 Apr 2018 17:35:50 +0000 (-0500) Subject: osd/OSDMap: add SIGNIFICANT_FEATURES and helper X-Git-Tag: v13.1.0~67^2~5 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0e0efdb4c0501250babdaf0bc445bef63387fddd;p=ceph.git osd/OSDMap: add SIGNIFICANT_FEATURES and helper Signed-off-by: Sage Weil --- diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index 484a30cfe173..e5d9bad080b8 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -2521,6 +2521,8 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const ENCODE_START(8, 7, bl); { + // NOTE: any new encoding dependencies must be reflected by + // SIGNIFICANT_FEATURES uint8_t v = 7; if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { v = 3; @@ -2597,6 +2599,8 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const } { + // NOTE: any new encoding dependencies must be reflected by + // SIGNIFICANT_FEATURES uint8_t target_v = 6; if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { target_v = 1; diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index d7ba76ba8c98..c17a36f3bdc8 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -507,6 +507,22 @@ private: int32_t max_osd; vector osd_state; + // These features affect OSDMap[::Incremental] encoding, or the + // encoding of some type embedded therein (CrushWrapper, something + // from osd_types, etc.). + static constexpr uint64_t SIGNIFICANT_FEATURES = + CEPH_FEATUREMASK_PGID64 | + CEPH_FEATUREMASK_PGPOOL3 | + CEPH_FEATUREMASK_OSDENC | + CEPH_FEATUREMASK_OSDMAP_ENC | + CEPH_FEATUREMASK_OSD_POOLRESEND | + CEPH_FEATUREMASK_NEW_OSDOP_ENCODING | + CEPH_FEATUREMASK_MSG_ADDR2 | + CEPH_FEATUREMASK_CRUSH_TUNABLES5 | + CEPH_FEATUREMASK_CRUSH_CHOOSE_ARGS | + CEPH_FEATUREMASK_SERVER_LUMINOUS | + CEPH_FEATUREMASK_SERVER_MIMIC; + struct addrs_s { mempool::osdmap::vector > client_addr; mempool::osdmap::vector > cluster_addr; @@ -599,6 +615,11 @@ private: OSDMap& operator=(const OSDMap& other) = default; public: + /// return feature mask subset that is relevant to OSDMap encoding + static uint64_t get_significant_features(uint64_t features) { + return SIGNIFICANT_FEATURES & features; + } + void deepish_copy_from(const OSDMap& o) { *this = o; primary_temp.reset(new mempool::osdmap::map(*o.primary_temp)); diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index ebe79de9dd2f..9ba7bc51b1a2 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1553,6 +1553,8 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const } uint8_t v = 26; + // NOTE: any new encoding dependencies must be reflected by + // SIGNIFICANT_FEATURES if (!(features & CEPH_FEATURE_NEW_OSDOP_ENCODING)) { // this was the first post-hammer thing we added; if it's missing, encode // like hammer.