From: Casey Bodley Date: Wed, 10 Feb 2021 00:04:19 +0000 (-0500) Subject: rgw: rgw_data_change can decode v1 format if gen was 0 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=bb3ce3437004284e19e61a12544050366aff3eba;p=ceph.git rgw: rgw_data_change can decode v1 format if gen was 0 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 --- diff --git a/src/rgw/rgw_datalog.h b/src/rgw/rgw_datalog.h index 1322c27043171..565f530270b81 100644 --- a/src/rgw/rgw_datalog.h +++ b/src/rgw/rgw_datalog.h @@ -55,7 +55,9 @@ struct rgw_data_change { 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); @@ -71,10 +73,11 @@ struct rgw_data_change { 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); }