diff --git a/apps/emqx/src/emqx_rpc.erl b/apps/emqx/src/emqx_rpc.erl index ad7e9891f..b5306ecaa 100644 --- a/apps/emqx/src/emqx_rpc.erl +++ b/apps/emqx/src/emqx_rpc.erl @@ -27,6 +27,12 @@ , multicall/5 ]). +-export_type([ badrpc/0 + , call_result/0 + , cast_result/0 + , multicall_result/0 + ]). + -compile({inline, [ rpc_node/1 , rpc_nodes/1 @@ -34,23 +40,37 @@ -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) -> 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) -> 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) -> - 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) -> - 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) -> - 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) -> - 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) -> {Node, rand:uniform(max_client_num())}; diff --git a/apps/emqx/test/props/prop_emqx_rpc.erl b/apps/emqx/test/props/prop_emqx_rpc.erl index 18f34ba8d..67000b214 100644 --- a/apps/emqx/test/props/prop_emqx_rpc.erl +++ b/apps/emqx/test/props/prop_emqx_rpc.erl @@ -60,7 +60,6 @@ prop_nodes() -> begin Nodes = punch(Nodes0), case emqx_rpc:multicall(Nodes, erlang, system_time, []) of - {badrpc, _Reason} -> true; {RealResults, RealBadNodes} when is_list(RealResults); is_list(RealBadNodes) -> @@ -74,7 +73,6 @@ prop_nodes_with_key() -> begin Nodes = punch(Nodes0), case emqx_rpc:multicall(Key, Nodes, erlang, system_time, []) of - {badrpc, _Reason} -> true; {RealResults, RealBadNodes} when is_list(RealResults); is_list(RealBadNodes) ->