From f9f92b7d2fbdeda52ef8c102890e19d0d9027767 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?rich=CE=9Brd?= Date: Mon, 11 Mar 2024 10:08:46 -0400 Subject: [PATCH] fix: introduce new field for shards in metadata protocol (#2511) * fix: repeated fields are packed in proto3 * fix: add new field for shards in metadata protobuffers to avoid breaking change and deprecate original field --- waku/waku_metadata/rpc.nim | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/waku/waku_metadata/rpc.nim b/waku/waku_metadata/rpc.nim index dd6034d81..fb85b774e 100644 --- a/waku/waku_metadata/rpc.nim +++ b/waku/waku_metadata/rpc.nim @@ -23,9 +23,9 @@ proc encode*(rpc: WakuMetadataRequest): ProtoBuffer = var pb = initProtoBuffer() pb.write3(1, rpc.clusterId) - for shard in rpc.shards: - pb.write3(2, shard) + pb.write3(2, shard) # deprecated + pb.writePacked(3, rpc.shards) pb.finish3() pb @@ -41,7 +41,13 @@ proc decode*(T: type WakuMetadataRequest, buffer: seq[byte]): ProtoResult[T] = rpc.clusterId = some(clusterId.uint32) var shards: seq[uint64] - if ?pb.getRepeatedField(2, shards): + if ?pb.getPackedRepeatedField(3, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getPackedRepeatedField(2, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getRepeatedField(2, shards): for shard in shards: rpc.shards.add(shard.uint32) @@ -51,9 +57,9 @@ proc encode*(rpc: WakuMetadataResponse): ProtoBuffer = var pb = initProtoBuffer() pb.write3(1, rpc.clusterId) - for shard in rpc.shards: - pb.write3(2, shard) + pb.write3(2, shard) # deprecated + pb.writePacked(3, rpc.shards) pb.finish3() pb @@ -69,8 +75,16 @@ proc decode*(T: type WakuMetadataResponse, buffer: seq[byte]): ProtoResult[T] = rpc.clusterId = some(clusterId.uint32) var shards: seq[uint64] - if ?pb.getRepeatedField(2, shards): + + if ?pb.getPackedRepeatedField(3, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getPackedRepeatedField(2, shards): + for shard in shards: + rpc.shards.add(shard.uint32) + elif ?pb.getRepeatedField(2, shards): for shard in shards: rpc.shards.add(shard.uint32) + ok(rpc)