f->close_section();
f->dump_unsigned("features", mds_features);
f->dump_unsigned("flags", flags);
+ f->dump_object("compat", compat);
}
void MDSMap::mds_info_t::dump(std::ostream& o) const
if (join_fscid != FS_CLUSTER_ID_NONE) {
o << " join_fscid=" << join_fscid;
}
- o << " addr " << addrs << "]";
+ o << " addr " << addrs;
+ o << " compat ";
+ compat.printlite(o);
+ o << "]";
}
void MDSMap::mds_info_t::generate_test_instances(std::list<mds_info_t*>& ls)
void MDSMap::mds_info_t::encode_versioned(bufferlist& bl, uint64_t features) const
{
- __u8 v = 9;
+ __u8 v = 10;
if (!HAVE_FEATURE(features, SERVER_NAUTILUS)) {
v = 7;
}
if (v >= 9) {
encode(flags, bl);
}
+ if (v >= 10) {
+ encode(compat, bl);
+ }
ENCODE_FINISH(bl);
}
void MDSMap::mds_info_t::decode(bufferlist::const_iterator& bl)
{
- DECODE_START_LEGACY_COMPAT_LEN(9, 4, 4, bl);
+ DECODE_START_LEGACY_COMPAT_LEN(10, 4, 4, bl);
decode(global_id, bl);
decode(name, bl);
decode(rank, bl);
if (struct_v >= 9) {
decode(flags, bl);
}
+ if (struct_v >= 10) {
+ decode(compat, bl);
+ }
DECODE_FINISH(bl);
}
}
}
+ for (auto& p: mds_info) {
+ static const CompatSet empty;
+ auto& info = p.second;
+ if (empty.compare(info.compat) == 0) {
+ /* bootstrap old compat; mds_info_t::decode does not have access to MDSMap */
+ info.compat = compat;
+ }
+ }
+
DECODE_FINISH(p);
}