Explorar el Código

fix(emqx_rpc): Add types and remove impossible clauses

k32 hace 4 años
padre
commit
de89f7b253
Se han modificado 2 ficheros con 24 adiciones y 6 borrados
  1. 24 4
      apps/emqx/src/emqx_rpc.erl
  2. 0 2
      apps/emqx/test/props/prop_emqx_rpc.erl

+ 24 - 4
apps/emqx/src/emqx_rpc.erl

@@ -27,6 +27,12 @@
         , multicall/5
         , multicall/5
         ]).
         ]).
 
 
+-export_type([ badrpc/0
+             , call_result/0
+             , cast_result/0
+             , multicall_result/0
+             ]).
+
 -compile({inline,
 -compile({inline,
           [ rpc_node/1
           [ rpc_node/1
           , rpc_nodes/1
           , rpc_nodes/1
@@ -34,23 +40,37 @@
 
 
 -define(DefaultClientNum, 1).
 -define(DefaultClientNum, 1).
 
 
+-type badrpc() ::  {badrpc, term()} | {badtcp, term()}.
+
+-type call_result() :: term() | badrpc().
+
+-type cast_result() :: true.
+
+-type multicall_result() :: {_Results :: [term()], _BadNodes :: [node()]}.
+
+-spec call(node(), module(), atom(), list()) -> call_result().
 call(Node, Mod, Fun, Args) ->
 call(Node, Mod, Fun, Args) ->
     filter_result(gen_rpc:call(rpc_node(Node), Mod, Fun, Args)).
     filter_result(gen_rpc:call(rpc_node(Node), Mod, Fun, Args)).
 
 
+-spec call(term(), node(), module(), atom(), list()) -> call_result().
 call(Key, Node, Mod, Fun, Args) ->
 call(Key, Node, Mod, Fun, Args) ->
     filter_result(gen_rpc:call(rpc_node({Key, Node}), Mod, Fun, Args)).
     filter_result(gen_rpc:call(rpc_node({Key, Node}), Mod, Fun, Args)).
 
 
+-spec multicall([node()], module(), atom(), list()) -> multicall_result().
 multicall(Nodes, Mod, Fun, Args) ->
 multicall(Nodes, Mod, Fun, Args) ->
-    filter_result(gen_rpc:multicall(rpc_nodes(Nodes), Mod, Fun, Args)).
+    gen_rpc:multicall(rpc_nodes(Nodes), Mod, Fun, Args).
 
 
+-spec multicall(term(), [node()], module(), atom(), list()) -> multicall_result().
 multicall(Key, Nodes, Mod, Fun, Args) ->
 multicall(Key, Nodes, Mod, Fun, Args) ->
-    filter_result(gen_rpc:multicall(rpc_nodes([{Key, Node} || Node <- Nodes]), Mod, Fun, Args)).
+    gen_rpc:multicall(rpc_nodes([{Key, Node} || Node <- Nodes]), Mod, Fun, Args).
 
 
+-spec cast(node(), module(), atom(), list()) -> cast_result().
 cast(Node, Mod, Fun, Args) ->
 cast(Node, Mod, Fun, Args) ->
-    filter_result(gen_rpc:cast(rpc_node(Node), Mod, Fun, Args)).
+    gen_rpc:cast(rpc_node(Node), Mod, Fun, Args).
 
 
+-spec cast(term(), node(), module(), atom(), list()) -> cast_result().
 cast(Key, Node, Mod, Fun, Args) ->
 cast(Key, Node, Mod, Fun, Args) ->
-    filter_result(gen_rpc:cast(rpc_node({Key, Node}), Mod, Fun, Args)).
+    gen_rpc:cast(rpc_node({Key, Node}), Mod, Fun, Args).
 
 
 rpc_node(Node) when is_atom(Node) ->
 rpc_node(Node) when is_atom(Node) ->
     {Node, rand:uniform(max_client_num())};
     {Node, rand:uniform(max_client_num())};

+ 0 - 2
apps/emqx/test/props/prop_emqx_rpc.erl

@@ -60,7 +60,6 @@ prop_nodes() ->
          begin
          begin
              Nodes = punch(Nodes0),
              Nodes = punch(Nodes0),
              case emqx_rpc:multicall(Nodes, erlang, system_time, []) of
              case emqx_rpc:multicall(Nodes, erlang, system_time, []) of
-                 {badrpc, _Reason} -> true;
                  {RealResults, RealBadNodes}
                  {RealResults, RealBadNodes}
                    when is_list(RealResults);
                    when is_list(RealResults);
                         is_list(RealBadNodes) ->
                         is_list(RealBadNodes) ->
@@ -74,7 +73,6 @@ prop_nodes_with_key() ->
          begin
          begin
              Nodes = punch(Nodes0),
              Nodes = punch(Nodes0),
              case emqx_rpc:multicall(Key, Nodes, erlang, system_time, []) of
              case emqx_rpc:multicall(Key, Nodes, erlang, system_time, []) of
-                 {badrpc, _Reason} -> true;
                  {RealResults, RealBadNodes}
                  {RealResults, RealBadNodes}
                    when is_list(RealResults);
                    when is_list(RealResults);
                         is_list(RealBadNodes) ->
                         is_list(RealBadNodes) ->