There was no version encoding previously, so this is an incompatible
change. Fortunately this type is only used in one place, MOSDPGCreate,
so we'll rev that encoding and compensate there. All is well!
Signed-off-by: Sage Weil <sage.weil@dreamhost.com>
const char *get_type_name() const { return "pg_create"; }
void encode_payload(uint64_t features) {
+ header.version = 2;
::encode(epoch, payload);
::encode(mkpg, payload);
}
void decode_payload() {
bufferlist::iterator p = payload.begin();
::decode(epoch, p);
- ::decode(mkpg, p);
+ if (header.version >= 2) {
+ ::decode(mkpg, p);
+ } else {
+ __u32 n;
+ ::decode(n, p);
+ while (n--) {
+ pg_t pgid;
+ epoch_t created; // epoch pg created
+ pg_t parent; // split from parent (if != pg_t())
+ __s32 split_bits;
+ ::decode(pgid, p);
+ ::decode(created, p);
+ ::decode(parent, p);
+ ::decode(split_bits, p);
+ mkpg[pgid] = pg_create_t(created, parent, split_bits);
+ }
+ }
}
void print(ostream& out) const {
void pg_create_t::encode(bufferlist &bl) const
{
+ ENCODE_START(1, 1, bl);
::encode(created, bl);
::encode(parent, bl);
::encode(split_bits, bl);
+ ENCODE_FINISH(bl);
}
void pg_create_t::decode(bufferlist::iterator &bl)
{
+ DECODE_START(1, bl);
::decode(created, bl);
::decode(parent, bl);
::decode(split_bits, bl);
+ DECODE_FINISH(bl);
}
void pg_create_t::dump(Formatter *f) const