]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: move conditional MDSMap encoding into single encode method
authorGreg Farnum <greg@inktank.com>
Tue, 15 Jan 2013 21:10:42 +0000 (13:10 -0800)
committerGreg Farnum <greg@inktank.com>
Tue, 5 Feb 2013 21:29:06 +0000 (13:29 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/MDSMap.cc
src/mds/MDSMap.h
src/messages/MMDSMap.h
src/mon/MDSMonitor.cc

index 37e8ef7f05884600c6f828a4183b00da49e242d6..5406b21209238e331eb5816d79e7a8d823f81e45 100644 (file)
@@ -290,31 +290,32 @@ void MDSMap::mds_info_t::decode(bufferlist::iterator& bl)
 
 
 
-void MDSMap::encode_client_old(bufferlist& bl) const
+void MDSMap::encode(bufferlist& bl, uint64_t features) const
 {
-  __u16 v = 2;
-  ::encode(v, bl);
-  ::encode(epoch, bl);
-  ::encode(flags, bl);
-  ::encode(last_failure, bl);
-  ::encode(root, bl);
-  ::encode(session_timeout, bl);
-  ::encode(session_autoclose, bl);
-  ::encode(max_file_size, bl);
-  ::encode(max_mds, bl);
-  ::encode(mds_info, bl);
-  __u32 n = data_pools.size();
-  ::encode(n, bl);
-  for (set<int64_t>::const_iterator p = data_pools.begin(); p != data_pools.end(); ++p) {
-    n = *p;
+  if ((features & CEPH_FEATURE_PGID64) == 0) {
+    __u16 v = 2;
+    ::encode(v, bl);
+    ::encode(epoch, bl);
+    ::encode(flags, bl);
+    ::encode(last_failure, bl);
+    ::encode(root, bl);
+    ::encode(session_timeout, bl);
+    ::encode(session_autoclose, bl);
+    ::encode(max_file_size, bl);
+    ::encode(max_mds, bl);
+    ::encode(mds_info, bl);
+    __u32 n = data_pools.size();
     ::encode(n, bl);
+    for (set<int64_t>::const_iterator p = data_pools.begin(); p != data_pools.end(); ++p) {
+      n = *p;
+      ::encode(n, bl);
+    }
+
+    int32_t m = cas_pool;
+    ::encode(m, bl);
+    return;
   }
-  int32_t m = cas_pool;
-  ::encode(m, bl);
-}
 
-void MDSMap::encode(bufferlist& bl) const
-{
   __u16 v = 3;
   ::encode(v, bl);
   ::encode(epoch, bl);
index a0fb6c583f0f0257d90112193f8e08dbc7ced211..a683df641a6da6a743fc484ea5519881429dcde6 100644 (file)
@@ -475,9 +475,7 @@ public:
       return mds_info[gid].inc;
     return -1;
   }
-
-  void encode_client_old(bufferlist& bl) const;
-  void encode(bufferlist& bl) const;
+  void encode(bufferlist& bl, uint64_t features) const;
   void decode(bufferlist::iterator& p);
   void decode(bufferlist& bl) {
     bufferlist::iterator p = bl.begin();
@@ -491,7 +489,7 @@ public:
   void dump(Formatter *f) const;
 };
 WRITE_CLASS_ENCODER(MDSMap::mds_info_t)
-WRITE_CLASS_ENCODER(MDSMap)
+WRITE_CLASS_ENCODER_FEATURES(MDSMap)
 
 inline ostream& operator<<(ostream& out, MDSMap& m) {
   m.print_summary(out);
index b5558493746c590982734745010c5146c1e78907..42bb98f54e1c08f6b35ea61a90615c49d5d18191 100644 (file)
@@ -61,7 +61,7 @@ class MMDSMap : public Message {
     Message(CEPH_MSG_MDS_MAP),
     fsid(f) {
     epoch = mm->get_epoch();
-    mm->encode(encoded);
+    mm->encode(encoded, -1);  // we will reencode with fewer features as necessary
   }
 private:
   ~MMDSMap() {}
@@ -87,7 +87,7 @@ public:
       MDSMap m;
       m.decode(encoded);
       encoded.clear();
-      m.encode_client_old(encoded);
+      m.encode(encoded, features);
     }
     ::encode(encoded, payload);
   }
index cd2dc8fa517955e4f194568715dcfe3942e014a4..4e4349249d48cd520cf9979bca8bbc93e5eb7353 100644 (file)
@@ -126,7 +126,7 @@ void MDSMonitor::encode_pending(bufferlist &bl)
 
   // apply to paxos
   assert(paxos->get_version() + 1 == pending_mdsmap.epoch);
-  pending_mdsmap.encode(bl);
+  pending_mdsmap.encode(bl, mon->get_quorum_features());
 }
 
 void MDSMonitor::update_logger()
@@ -603,11 +603,11 @@ bool MDSMonitor::preprocess_command(MMonCommand *m)
        } else {
          MDSMap mm;
          mm.decode(b);
-         mm.encode(rdata);
+         mm.encode(rdata, m->get_connection()->get_features());
          ss << "got mdsmap epoch " << mm.get_epoch();
        }
       } else {
-       mdsmap.encode(rdata);
+       mdsmap.encode(rdata, m->get_connection()->get_features());
        ss << "got mdsmap epoch " << mdsmap.get_epoch();
       }
       r = 0;