From: Xiaoxi CHEN Date: Mon, 23 Apr 2018 17:35:50 +0000 (-0500) Subject: osd/OSDMap: add SIGNIFICANT_FEATURES and helper X-Git-Tag: v12.2.6~44^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=166553fcd8af0852489374ae2eece091f93b33bd;p=ceph.git osd/OSDMap: add SIGNIFICANT_FEATURES and helper Signed-off-by: Sage Weil (cherry picked from commit 0e0efdb4c0501250babdaf0bc445bef63387fddd) Conflicts: src/osd/OSDMap.cc Horner v=6, target_v=5 for luminous. src/osd/OSDMap.h Drop CEPH_FEATUREMASK_SERVER_MIMIC --- diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index f2c4e34023b..f7af73b57d3 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -2487,6 +2487,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 = 6; if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { v = 3; @@ -2557,6 +2559,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 = 5; if (!HAVE_FEATURE(features, SERVER_LUMINOUS)) { target_v = 1; diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 847c7ecb39f..9adc911e7d4 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -507,6 +507,20 @@ 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 ; struct addrs_s { mempool::osdmap::vector > client_addr; mempool::osdmap::vector > cluster_addr; @@ -591,6 +605,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 8928fb93dbf..e1fba0e3381 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -1542,6 +1542,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.