Better gen_rpc performance
This commit is contained in:
parent
eb7ae13ae9
commit
4603ea17ef
|
@ -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.
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue