aboutsummaryrefslogtreecommitdiffstats
path: root/lib/mnesia/src/mnesia_frag_hash.erl
diff options
context:
space:
mode:
authorPhilip Robinson <[email protected]>2011-04-27 22:42:18 +1000
committerPhilip Robinson <[email protected]>2011-04-27 22:42:18 +1000
commit67a20c0e2f91e143536202ae969d8211e3ac3da8 (patch)
treec2b1e74237ab1c95a41fa11ee5769e03e169ef36 /lib/mnesia/src/mnesia_frag_hash.erl
parentef407fad10bccb97aab140f5b99786b8c7b2237a (diff)
downloadotp-67a20c0e2f91e143536202ae969d8211e3ac3da8.tar.gz
otp-67a20c0e2f91e143536202ae969d8211e3ac3da8.tar.bz2
otp-67a20c0e2f91e143536202ae969d8211e3ac3da8.zip
Reduce calls to phash in key_to_frag_number
Original code calls phash 1..2 times, based on which fragment the hashed key targets and how many fragments exist. New code always calls phash only once.
Diffstat (limited to 'lib/mnesia/src/mnesia_frag_hash.erl')
-rw-r--r--lib/mnesia/src/mnesia_frag_hash.erl18
1 files changed, 8 insertions, 10 deletions
diff --git a/lib/mnesia/src/mnesia_frag_hash.erl b/lib/mnesia/src/mnesia_frag_hash.erl
index 610ba2535c..d70579c3b3 100644
--- a/lib/mnesia/src/mnesia_frag_hash.erl
+++ b/lib/mnesia/src/mnesia_frag_hash.erl
@@ -101,21 +101,19 @@ del_frag(OldState) ->
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-key_to_frag_number(#hash_state{function = phash, next_n_to_split = SplitN, n_doubles = L}, Key) ->
- P = SplitN,
- A = erlang:phash(Key, power2(L)),
+key_to_frag_number(#hash_state{function = phash, n_fragments = N, n_doubles = L}, Key) ->
+ A = erlang:phash(Key, power2(L + 1)),
if
- A < P ->
- erlang:phash(Key, power2(L + 1));
+ A > N ->
+ A - power2(L);
true ->
A
end;
-key_to_frag_number(#hash_state{function = phash2, next_n_to_split = SplitN, n_doubles = L}, Key) ->
- P = SplitN,
- A = erlang:phash2(Key, power2(L)) + 1,
+key_to_frag_number(#hash_state{function = phash2, n_fragments = N, n_doubles = L}, Key) ->
+ A = erlang:phash2(Key, power2(L + 1)) + 1,
if
- A < P ->
- erlang:phash2(Key, power2(L + 1)) + 1;
+ A > N ->
+ A - power2(L);
true ->
A
end;