++p) {
n = p->first;
::encode(n, bl);
- ::encode(p->second, bl);
+ ::encode(p->second, bl, 0);
}
// for ::encode(new_pool_names, bl);
n = new_pool_names.size();
::encode(crush, bl);
::encode(new_max_osd, bl);
- ::encode(new_pools, bl);
+ ::encode(new_pools, bl, features);
::encode(new_pool_names, bl);
::encode(old_pools, bl);
::encode(new_up_client, bl);
++p) {
n = p->first;
::encode(n, bl);
- ::encode(p->second, bl);
+ ::encode(p->second, bl, 0);
}
// for ::encode(pool_name, bl);
n = pool_name.size();
::encode(created, bl);
::encode(modified, bl);
- ::encode(pools, bl);
+ ::encode(pools, bl, features);
::encode(pool_name, bl);
::encode(pool_max, bl);
return ceph_stable_mod(pg.ps(), pgp_num, pgp_num_mask) + pg.pool();
}
-void pg_pool_t::encode(bufferlist& bl) const
-{
- __u8 struct_v = 2;
+void pg_pool_t::encode(bufferlist& bl, uint64_t features) const
+{
+ if ((features & CEPH_FEATURE_PGPOOL3) == 0) {
+ // this encoding matches the old struct ceph_pg_pool
+ __u8 struct_v = 2;
+ ::encode(struct_v, bl);
+ ::encode(type, bl);
+ ::encode(size, bl);
+ ::encode(crush_ruleset, bl);
+ ::encode(object_hash, bl);
+ ::encode(pg_num, bl);
+ ::encode(pgp_num, bl);
+ ::encode(lpg_num, bl);
+ ::encode(lpgp_num, bl);
+ ::encode(last_change, bl);
+ ::encode(snap_seq, bl);
+ ::encode(snap_epoch, bl);
+
+ __u32 n = snaps.size();
+ ::encode(n, bl);
+ n = removed_snaps.num_intervals();
+ ::encode(n, bl);
+
+ ::encode(auid, bl);
+
+ ::encode_nohead(snaps, bl);
+ removed_snaps.encode_nohead(bl);
+ return;
+ }
+
+ __u8 struct_v = 3;
::encode(struct_v, bl);
::encode(type, bl);
::encode(size, bl);
::encode(last_change, bl);
::encode(snap_seq, bl);
::encode(snap_epoch, bl);
-
- __u32 n = snaps.size();
- ::encode(n, bl);
- n = removed_snaps.num_intervals();
- ::encode(n, bl);
-
+ ::encode(snaps, bl);
+ ::encode(removed_snaps, bl);
::encode(auid, bl);
-
- ::encode_nohead(snaps, bl);
- removed_snaps.encode_nohead(bl);
}
void pg_pool_t::decode(bufferlist::iterator& bl)
{
__u8 struct_v;
::decode(struct_v, bl);
- if (struct_v > 2)
+ if (struct_v > 3)
throw buffer::error();
::decode(type, bl);
::decode(last_change, bl);
::decode(snap_seq, bl);
::decode(snap_epoch, bl);
-
- __u32 n, m;
- ::decode(n, bl);
- ::decode(m, bl);
-
- ::decode(auid, bl);
- ::decode_nohead(n, snaps, bl);
- removed_snaps.decode_nohead(m, bl);
+ if (struct_v >= 3) {
+ ::decode(snaps, bl);
+ ::decode(removed_snaps, bl);
+ ::decode(auid, bl);
+ } else {
+ __u32 n, m;
+ ::decode(n, bl);
+ ::decode(m, bl);
+ ::decode(auid, bl);
+ ::decode_nohead(n, snaps, bl);
+ removed_snaps.decode_nohead(m, bl);
+ }
calc_pg_masks();
}
*/
ps_t raw_pg_to_pps(pg_t pg) const;
- void encode(bufferlist& bl) const;
+ void encode(bufferlist& bl, uint64_t features) const;
void decode(bufferlist::iterator& bl);
};
-WRITE_CLASS_ENCODER(pg_pool_t)
+WRITE_CLASS_ENCODER_FEATURES(pg_pool_t)
ostream& operator<<(ostream& out, const pg_pool_t& p);