Suppress crypto and random compiler warnings
authorJay Doane <jay.s.doane@gmail.com>
Sun, 23 Dec 2018 18:07:02 +0000 (10:07 -0800)
committerJay Doane <jay.s.doane@gmail.com>
Thu, 27 Dec 2018 21:07:57 +0000 (13:07 -0800)
Replace deprecated crypto:rand_uniform/2 and 'random' module functions
with equivalent couch_rand:uniform/1 calls, or eliminate the offending
code entirely if unused.

Note that crypto:rand_uniform/2 takes two parameters which have
different semantics than the single argument couch_rand:uniform/1.

Tests in mem3 are also provided to validate that the random rotation of
node lists was converted correctly.

src/couch/src/couch_uuids.erl
src/couch/test/couch_file_tests.erl
src/couch/test/json_stream_parse_tests.erl
src/couch_pse_tests/src/cpse_test_fold_changes.erl
src/mem3/src/mem3.erl

index 5c7359b..b9c03b5 100644 (file)
@@ -95,7 +95,7 @@ new_prefix() ->
     couch_util:to_hex((crypto:strong_rand_bytes(13))).
 
 inc() ->
-    crypto:rand_uniform(1, 16#ffe).
+    couch_rand:uniform(16#ffd).
 
 state() ->
     AlgoStr = config:get("uuids", "algorithm", "random"),
index a387615..34c1a16 100644 (file)
@@ -418,7 +418,7 @@ nuke_dir_test_() ->
                 File0 = ?tempfile() ++ ".couch",
                 RootDir = filename:dirname(File0),
                 BaseName = filename:basename(File0),
-                Seed = crypto:rand_uniform(1000000000, 9999999999),
+                Seed = couch_rand:uniform(8999999999) + 999999999,
                 DDocDir = io_lib:format("db.~b_design", [Seed]),
                 ViewDir = filename:join([RootDir, DDocDir]),
                 file:make_dir(ViewDir),
index ffcf918..e690d77 100644 (file)
@@ -136,7 +136,7 @@ single_byte_data_fun([H | T]) ->
 multiple_bytes_data_fun([]) ->
     done;
 multiple_bytes_data_fun(L) ->
-    N = crypto:rand_uniform(0, 7),
+    N = couch_rand:uniform(7) - 1,
     {Part, Rest} = split(L, N),
     {list_to_binary(Part), fun() -> multiple_bytes_data_fun(Rest) end}.
 
index 8ee74f0..00a402c 100644 (file)
@@ -170,25 +170,11 @@ do_mutation_ordering(Db, Seq, [{DocId, _OldSeq} | Rest], DocSeqAcc) ->
 
 
 shuffle(List) ->
-    random:seed(os:timestamp()),
-    Paired = [{random:uniform(), I} || I <- List],
+    Paired = [{couch_rand:uniform(), I} || I <- List],
     Sorted = lists:sort(Paired),
     [I || {_, I} <- Sorted].
 
 
-remove_random(List) ->
-    Pos = random:uniform(length(List)),
-    remove_random(Pos, List).
-
-
-remove_random(1, [Item | Rest]) ->
-    {Item, Rest};
-
-remove_random(N, [Skip | Rest]) when N > 1 ->
-    {Item, Tail} = remove_random(N - 1, Rest),
-    {Item, [Skip | Tail]}.
-
-
 fold_fun(#full_doc_info{id=Id, update_seq=Seq}, Acc) ->
     {ok, [{Id, Seq} | Acc]}.
 
index de63300..f1af0f7 100644 (file)
@@ -196,10 +196,13 @@ choose_shards(DbName, Nodes, Options) ->
     Q = mem3_util:q_val(couch_util:get_value(q, Options,
         config:get("cluster", "q", "8"))),
     %% rotate to a random entry in the nodelist for even distribution
-    {A, B} = lists:split(crypto:rand_uniform(1,length(Nodes)+1), Nodes),
-    RotatedNodes = B ++ A,
+    RotatedNodes = rotate_rand(Nodes),
     mem3_util:create_partition_map(DbName, N, Q, RotatedNodes, Suffix).
 
+rotate_rand(Nodes) ->
+    {A, B} = lists:split(couch_rand:uniform(length(Nodes)), Nodes),
+    B ++ A.
+
 get_placement(Options) ->
     case couch_util:get_value(placement, Options) of
         undefined ->
@@ -382,4 +385,11 @@ allowed_nodes_test_() ->
         ]
     }]}.
 
+rotate_rand_degenerate_test() ->
+    ?assertEqual([1], rotate_rand([1])).
+
+rotate_rand_distribution_test() ->
+    Cases = [rotate_rand([1, 2, 3]) || _ <- lists:seq(1, 100)],
+    ?assertEqual(3, length(lists:usort(Cases))).
+
 -endif.