From: Greg Farnum Date: Tue, 15 Jan 2013 21:10:42 +0000 (-0800) Subject: mds: move conditional MDSMap encoding into single encode method X-Git-Tag: v0.58~100^2~53 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=771204b22d59a51fc8f526ba1e2584673b1a8065;p=ceph.git mds: move conditional MDSMap encoding into single encode method Signed-off-by: Sage Weil Signed-off-by: Greg Farnum --- diff --git a/src/mds/MDSMap.cc b/src/mds/MDSMap.cc index 37e8ef7f058..5406b212092 100644 --- a/src/mds/MDSMap.cc +++ b/src/mds/MDSMap.cc @@ -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::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::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); diff --git a/src/mds/MDSMap.h b/src/mds/MDSMap.h index a0fb6c583f0..a683df641a6 100644 --- a/src/mds/MDSMap.h +++ b/src/mds/MDSMap.h @@ -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); diff --git a/src/messages/MMDSMap.h b/src/messages/MMDSMap.h index b5558493746..42bb98f54e1 100644 --- a/src/messages/MMDSMap.h +++ b/src/messages/MMDSMap.h @@ -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); } diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index cd2dc8fa517..4e4349249d4 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -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;