diff --git a/src/riak_kv_bitcask_backend.erl b/src/riak_kv_bitcask_backend.erl index a825effc71..de1d3f251e 100644 --- a/src/riak_kv_bitcask_backend.erl +++ b/src/riak_kv_bitcask_backend.erl @@ -93,32 +93,41 @@ capabilities(_, _) -> {ok, ?CAPABILITIES}. %% @doc Transformation functions for the keys coming off the disk. -key_transform_to_1(<> = Key) -> +key_transform_to_1(<> = Key) -> Key; -key_transform_to_1(<<131:8,_Rest/binary>> = Key0) -> +key_transform_to_1(<<131:8,_Rest/bits>> = Key0) -> {Bucket, Key} = binary_to_term(Key0), - BucketSz = size(Bucket), - <>. + make_bk(?VERSION_BYTE, Bucket, Key). -key_transform_to_0(<> = Key0) -> - <> = Key0, - term_to_binary({Bucket, Key}); +key_transform_to_0(<> = Key0) -> + term_to_binary(bk_to_tuple(Key0)); key_transform_to_0(<<131:8,_Rest/binary>> = Key) -> Key. -bk_to_tuple(<>) -> - {Bucket, Key}; +bk_to_tuple(<>) -> + case HasType of + 0 -> + %% no type, first field is bucket + {TypeOrBucket, Rest}; + 1 -> + %% has a tyoe, extract bucket as well + <> = Rest, + {{TypeOrBucket, Bucket}, Key} + end; bk_to_tuple(<<131:8,_Rest/binary>> = BK) -> binary_to_term(BK). make_bk(0, Bucket, Key) -> term_to_binary({Bucket, Key}); +make_bk(1, {Type, Bucket}, Key) -> + TypeSz = size(Type), + BucketSz = size(Bucket), + <>; make_bk(1, Bucket, Key) -> BucketSz = size(Bucket), - <>. %% @doc Start the bitcask backend