diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2015-07-30 17:51:30 +0200 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2015-08-05 16:16:37 +0200 |
| commit | 40b5c82b4b0feeab28fa85c2f1855590b722fc08 (patch) | |
| tree | 0c15edf8d9e4d5ec45b24be92f8c42acf90fcaa3 /src | |
| parent | 7953eb7f3ebf8a494257bc7fcfcc6a3ae378a6d6 (diff) | |
| download | rabbitmq-server-git-40b5c82b4b0feeab28fa85c2f1855590b722fc08.tar.gz | |
Use phash2() and the new Time API as a random seed
References #233.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gen_server2.erl | 5 | ||||
| -rw-r--r-- | src/gm.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_auth_backend_internal.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_mirror_queue_mode_exactly.erl | 5 | ||||
| -rw-r--r-- | src/rabbit_queue_location_random.erl | 2 |
5 files changed, 14 insertions, 8 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl index fd0e6553b5..3f09b8d3ef 100644 --- a/src/gen_server2.erl +++ b/src/gen_server2.erl @@ -624,7 +624,10 @@ unregister_name(_Name) -> ok. extend_backoff(undefined) -> undefined; extend_backoff({backoff, InitialTimeout, MinimumTimeout, DesiredHibPeriod}) -> - {backoff, InitialTimeout, MinimumTimeout, DesiredHibPeriod, now()}. + {backoff, InitialTimeout, MinimumTimeout, DesiredHibPeriod, + {erlang:phash2([node()]), + time_compat:monotonic_time(), + time_compat:unique_integer()}}. %%%======================================================================== %%% Internal functions diff --git a/src/gm.erl b/src/gm.erl index dbf9c295f9..3a9f4405be 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -551,8 +551,9 @@ forget_group(GroupName) -> init([GroupName, Module, Args, TxnFun]) -> put(process_name, {?MODULE, GroupName}), - {MegaSecs, Secs, MicroSecs} = now(), - random:seed(MegaSecs, Secs, MicroSecs), + random:seed(erlang:phash2([node()]), + time_compat:monotonic_time(), + time_compat:unique_integer()), Self = make_member(GroupName), gen_server2:cast(self(), join), {ok, #state { self = Self, diff --git a/src/rabbit_auth_backend_internal.erl b/src/rabbit_auth_backend_internal.erl index e53ce50c22..ced109d3ff 100644 --- a/src/rabbit_auth_backend_internal.erl +++ b/src/rabbit_auth_backend_internal.erl @@ -202,8 +202,9 @@ clear_password(Username) -> R. hash_password(Cleartext) -> - {A1,A2,A3} = now(), - random:seed(A1, A2, A3), + random:seed(erlang:phash2([node()]), + time_compat:monotonic_time(), + time_compat:unique_integer()), Salt = random:uniform(16#ffffffff), SaltBin = <<Salt:32>>, Hash = salted_md5(SaltBin, Cleartext), diff --git a/src/rabbit_mirror_queue_mode_exactly.erl b/src/rabbit_mirror_queue_mode_exactly.erl index 0c0b7a10e8..4721ad6136 100644 --- a/src/rabbit_mirror_queue_mode_exactly.erl +++ b/src/rabbit_mirror_queue_mode_exactly.erl @@ -45,8 +45,9 @@ suggested_queue_nodes(Count, MNode, SNodes, _SSNodes, Poss) -> end}. shuffle(L) -> - {A1,A2,A3} = now(), - random:seed(A1, A2, A3), + random:seed(erlang:phash2([node()]), + time_compat:monotonic_time(), + time_compat:unique_integer()), {_, L1} = lists:unzip(lists:keysort(1, [{random:uniform(), N} || N <- L])), L1. diff --git a/src/rabbit_queue_location_random.erl b/src/rabbit_queue_location_random.erl index b708077cf8..6a3d1fea67 100644 --- a/src/rabbit_queue_location_random.erl +++ b/src/rabbit_queue_location_random.erl @@ -39,6 +39,6 @@ description() -> queue_master_location(#amqqueue{}) -> Cluster = rabbit_queue_master_location_misc:all_nodes(), - RandomPos = erlang:phash(now(), length(Cluster)), + RandomPos = erlang:phash2(time_compat:monotonic_time(), length(Cluster)), MasterNode = lists:nth(RandomPos, Cluster), {ok, MasterNode}. |
