Better gen_rpc performance

This commit is contained in:
GilbertWong 2019-07-18 14:05:52 +08:00 committed by Shawn
parent eb7ae13ae9
commit 4603ea17ef
1 changed files with 19 additions and 9 deletions

View File

@ -23,18 +23,28 @@
-define(RPC, gen_rpc). -define(RPC, gen_rpc).
call(Node, Mod, Fun, Args) -> call(Node, Mod, Fun, Args) ->
filter_result(?RPC:call(Node, Mod, Fun, Args)). filter_result(?RPC:call(rpc_node(Node), Mod, Fun, Args)).
multicall(Nodes, Mod, Fun, Args) -> multicall(Nodes, Mod, Fun, Args) ->
filter_result(?RPC:multicall(Nodes, Mod, Fun, Args)). filter_result(?RPC:multicall(rpc_nodes(Nodes), Mod, Fun, Args)).
cast(Node, Mod, Fun, Args) -> cast(Node, Mod, Fun, Args) ->
filter_result(?RPC:cast(Node, Mod, Fun, Args)). filter_result(?RPC:cast(rpc_node(Node), Mod, Fun, Args)).
rpc_node(Node) ->
{Node, erlang:system_info(scheduler_id)}.
rpc_nodes(Nodes) ->
rpc_nodes(Nodes, []).
rpc_nodes([], Acc) ->
Acc;
rpc_nodes([Node | Nodes], Acc) ->
rpc_nodes(Nodes, [rpc_node(Node) | Acc]).
filter_result({Error, Reason})
when Error =:= badrpc; Error =:= badtcp ->
{badrpc, Reason};
filter_result(Delivery) -> filter_result(Delivery) ->
case Delivery of Delivery.
{badrpc, Reason} -> {badrpc, Reason};
{badtcp, Reason} -> {badrpc, Reason};
_ -> Delivery
end.