From 73cd438895abf15cd9b5643181310147b5c09aff Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Tue, 16 Nov 2021 14:27:48 -0800 Subject: [PATCH] Attempt better serialization/deserialzation for rbc --- src/hbbft_rbc.erl | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/hbbft_rbc.erl b/src/hbbft_rbc.erl index e801f52..fe812dd 100644 --- a/src/hbbft_rbc.erl +++ b/src/hbbft_rbc.erl @@ -283,7 +283,8 @@ serialize(#rbc_data{stripes=Stripes}=Data) when Stripes /= #{} -> #{rbc_data => term_to_binary(Data#rbc_data{stripes=#{}}), stripes => maps:map(fun(_K, V) -> maps:map(fun(_K2, {Index, Size, Shard}) -> - #{index => <>, size => <>, shard => Shard} + %% encode as u32 because rocks seems to like dropping smakk keys?? + #{index => <>, size => <>, shard => Shard} end, V) end, Stripes)}; serialize(#rbc_data{}=Data) -> @@ -292,7 +293,13 @@ serialize(#rbc_data{}=Data) -> deserialize(#{rbc_data := BinData}=Map) -> Data = binary_to_term(BinData), Data#rbc_data{stripes=maps:map(fun(_K, V) -> - maps:map(fun(_K2, #{index := <>, size := <>, shard := Shard}) -> - {Index, Size, Shard} - end, V) + maps:fold(fun(K2, #{index := <>, size := <>, shard := Shard}, Acc) -> + %% legacy decoding + maps:put(K2, {Index, Size, Shard}, Acc); + (K2, #{index := <>, size := <>, shard := Shard}, Acc) -> + maps:put(K2, {Index, Size, Shard}, Acc); + (_, _, Acc) -> + %% unable to deserialize??? + Acc + end, #{}, V) end, maps:get(stripes, Map, #{}))}.