aboutsummaryrefslogtreecommitdiffstats
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
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.
-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;