1
-module(mnesia_frag_hash_test).
5
-define(NUM_FRAGS, 20).
6
-define(NUM_KEYS, 10000).
14
% OLD mnesia_frag_hash:key_to_frag_number/2.
15
old_key_to_frag_number(#hash_state{function = phash, next_n_to_split = SplitN, n_doubles = L}, Key) ->
17
A = erlang:phash(Key, power2(L)),
20
erlang:phash(Key, power2(L + 1));
24
old_key_to_frag_number(#hash_state{function = phash2, next_n_to_split = SplitN, n_doubles = L}, Key) ->
26
A = erlang:phash2(Key, power2(L)) + 1,
29
erlang:phash2(Key, power2(L + 1)) + 1;
33
old_key_to_frag_number(OldState, Key) ->
34
State = convert_old_state(OldState),
35
old_key_to_frag_number(State, Key).
38
% NEW mnesia_frag_hash:key_to_frag_number/2.
39
new_key_to_frag_number(#hash_state{function = phash, n_fragments = N, n_doubles = L}, Key) ->
40
A = erlang:phash(Key, power2(L + 1)),
47
new_key_to_frag_number(#hash_state{function = phash2, n_fragments = N, n_doubles = L}, Key) ->
48
A = erlang:phash2(Key, power2(L + 1)) + 1,
55
new_key_to_frag_number(OldState, Key) ->
56
State = convert_old_state(OldState),
57
new_key_to_frag_number(State, Key).
60
% Helpers for key_to_frag_number functions.
63
1 bsl Y. % trunc(math:pow(2, Y)).
65
convert_old_state({hash_state, N, P, L}) ->
66
#hash_state{n_fragments = N,
73
test2(mnesia_frag_hash:init_state(undefined, undefined)), % phash2
74
test2({hash_state, 1, 1, 0}). % phash
79
fun(_, S) -> test_frag(S) end,
80
I, lists:seq(1, ?NUM_FRAGS)),
84
{State2,_,_} = mnesia_frag_hash:add_frag(State),
89
[test_key(State, Key) || Key <- lists:seq(1, ?NUM_KEYS)].
91
test_key(State, Key) ->
92
Old = old_key_to_frag_number(State, Key),
93
New = new_key_to_frag_number(State, Key),