diff --git a/src/leveled_codec.erl b/src/leveled_codec.erl index f3d8b08..1d2bc13 100644 --- a/src/leveled_codec.erl +++ b/src/leveled_codec.erl @@ -445,57 +445,44 @@ build_metadata_object(PrimaryKey, MD) -> riak_extract_metadata(delete, Size) -> {delete, null, null, Size}; riak_extract_metadata(ObjBin, Size) -> - {Vclock, SibData} = riak_metadata_from_binary(ObjBin), - {SibData, Vclock, erlang:phash2(ObjBin), Size}. + {Vclock, SibBin} = riak_metadata_from_binary(ObjBin), + {SibBin, Vclock, erlang:phash2(ObjBin), Size}. %% <>. -riak_metadata_to_binary(Vclock, SibData) -> - VclockBin = term_to_binary(Vclock), +riak_metadata_to_binary(VclockBin, SibMetaBin) -> VclockLen = byte_size(VclockBin), - % <>. - SibCount = length(SibData), - SibsBin = slimbin_contents(SibData), - <>. + <>. riak_metadata_from_binary(V1Binary) -> <> = V1Binary, - % Just grab the Sibling count and not the full metadata - % <> = Rest, - % {binary_to_term(VclockBin), SibCount}. <> = Rest, - SibMetaBinList = + SibMetaBin = case SibCount of SC when is_integer(SC) -> - get_metadata_from_siblings(SibsBin, SibCount, []) + get_metadata_from_siblings(SibsBin, + SibCount, + <>) end, - {binary_to_term(VclockBin), SibMetaBinList}. + {VclockBin, SibMetaBin}. -% Fixes the value length for each sibling to be zero, and so includes no value -slimbin_content(MetaBin) -> - MetaLen = byte_size(MetaBin), - <<0:32/integer, MetaLen:32/integer, MetaBin:MetaLen/binary>>. - -slimbin_contents(SibMetaBinList) -> - F = fun(MetaBin, Acc) -> - <> - end, - lists:foldl(F, <<>>, SibMetaBinList). - -get_metadata_from_siblings(<<>>, 0, SibMetaBinList) -> - SibMetaBinList; +get_metadata_from_siblings(<<>>, 0, SibMetaBin) -> + SibMetaBin; get_metadata_from_siblings(<>, SibCount, - SibMetaBinList) -> + SibMetaBin) -> <<_ValBin:ValLen/binary, MetaLen:32/integer, Rest1/binary>> = Rest0, <> = Rest1, get_metadata_from_siblings(Rest2, SibCount - 1, - [MetaBin|SibMetaBinList]). + <>). diff --git a/test/end_to_end/testutil.erl b/test/end_to_end/testutil.erl index e53eb4f..923b81e 100644 --- a/test/end_to_end/testutil.erl +++ b/test/end_to_end/testutil.erl @@ -258,11 +258,11 @@ check_forobject(Bookie, TestObject) -> {ok, HeadBinary} = book_riakhead(Bookie, TestObject#r_object.bucket, TestObject#r_object.key), - {_SibMetaBinList, + {_SibMetaBin, Vclock, _Hash, size} = leveled_codec:riak_extract_metadata(HeadBinary, size), - true = Vclock == TestObject#r_object.vclock. + true = binary_to_term(Vclock) == TestObject#r_object.vclock. check_formissingobject(Bookie, Bucket, Key) -> not_found = book_riakget(Bookie, Bucket, Key),