but if gen>0, require decoders to understand the v2 format. this way,
old clients can't decode entries with gen>0, so they won't be able to
serve them to other zones
Signed-off-by: Casey Bodley <cbodley@redhat.com>
uint64_t gen = 0;
void encode(ceph::buffer::list& bl) const {
- ENCODE_START(2, 2, bl);
+ // require decoders to recognize v2 when gen>0
+ const uint8_t compat = (gen == 0) ? 1 : 2;
+ ENCODE_START(2, compat, bl);
auto t = std::uint8_t(entity_type);
encode(t, bl);
encode(key, bl);
entity_type = DataLogEntityType(t);
decode(key, bl);
decode(timestamp, bl);
- if (struct_v < 2)
+ if (struct_v < 2) {
gen = 0;
- else
+ } else {
decode(gen, bl);
+ }
DECODE_FINISH(bl);
}