]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: add SIGNIFICANT_FEATURES and helper
authorXiaoxi CHEN <xiaoxchen@ebay.com>
Mon, 23 Apr 2018 17:35:50 +0000 (12:35 -0500)
committerXiaoxi CHEN <xiaoxchen@ebay.com>
Mon, 14 May 2018 05:51:40 +0000 (22:51 -0700)
Signed-off-by: Sage Weil <sage@redhat.com>
(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

src/osd/OSDMap.cc
src/osd/OSDMap.h
src/osd/osd_types.cc

index f2c4e34023b7c851588d746aaedfe39ffe439793..f7af73b57d36549b6beb781fbf00fe0128a2357a 100644 (file)
@@ -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;
index 847c7ecb39fa16b72c73aa01f4f4c8bc1d47e6bf..9adc911e7d40b677c924331064f2be0dd35e1d9c 100644 (file)
@@ -507,6 +507,20 @@ private:
   int32_t max_osd;
   vector<uint32_t> 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<ceph::shared_ptr<entity_addr_t> > client_addr;
     mempool::osdmap::vector<ceph::shared_ptr<entity_addr_t> > 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<pg_t,int32_t>(*o.primary_temp));
index 8928fb93dbfab41e9ed27d240dcf339a586aac01..e1fba0e3381ecd9f5995c29d3056e4064ccb9968 100644 (file)
@@ -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.