diff --git a/src/emqx_rpc.erl b/src/emqx_rpc.erl index e0d82f400..5f8e2d0d6 100644 --- a/src/emqx_rpc.erl +++ b/src/emqx_rpc.erl @@ -21,10 +21,30 @@ -define(RPC, gen_rpc). call(Node, Mod, Fun, Args) -> - ?RPC:call(Node, Mod, Fun, Args). + filter_result(?RPC:call(Node, Mod, Fun, Args)). multicall(Nodes, Mod, Fun, Args) -> - ?RPC:multicall(Nodes, Mod, Fun, Args). + filter_results(?RPC:multicall(Nodes, Mod, Fun, Args)). cast(Node, Mod, Fun, Args) -> - ?RPC:cast(Node, Mod, Fun, Args). + filter_result(?RPC:cast(Node, Mod, Fun, Args)). + +filter_result(Delivery) -> + case Delivery of + {badrpc, Reason} -> {badrpc, Reason}; + {badtcp, Reason} -> {badrpc, Reason}; + Delivery1 -> Delivery1 + end. + +filter_results(Deliverys) -> + filter_results(Deliverys, []). + +filter_results([], Acc) -> + Acc; +filter_results([Delivery | WaitDelivery], Acc) -> + case Delivery of + {badrpc, Reason} -> [{badrpc, Reason} | Acc], filter_results(WaitDelivery, Acc); + {badtcp, Reason} -> [{badrpc, Reason} | Acc], filter_results(WaitDelivery, Acc); + Delivery1 -> [Delivery1 | Acc], filter_results(WaitDelivery, Acc) + end. +