-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);
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();
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);
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() {}
MDSMap m;
m.decode(encoded);
encoded.clear();
- m.encode_client_old(encoded);
+ m.encode(encoded, features);
}
::encode(encoded, payload);
}
// 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()
} 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;