From c4cb9973a6d776d4486266a7d0c08102eb4d070a Mon Sep 17 00:00:00 2001 From: k32 <10274441+k32@users.noreply.github.com> Date: Fri, 21 Jan 2022 10:42:55 +0100 Subject: [PATCH] fix(emqx_gateway): Apply remarks --- apps/emqx_gateway/src/emqx_gateway_cm.erl | 8 ++++++-- apps/emqx_gateway/src/emqx_gateway_http.erl | 8 +++++--- apps/emqx_gateway/src/proto/emqx_gateway_cm_proto_v1.erl | 2 +- apps/emqx_gateway/test/emqx_gateway_cm_SUITE.erl | 1 + 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/apps/emqx_gateway/src/emqx_gateway_cm.erl b/apps/emqx_gateway/src/emqx_gateway_cm.erl index b9493349a..d977b0933 100644 --- a/apps/emqx_gateway/src/emqx_gateway_cm.erl +++ b/apps/emqx_gateway/src/emqx_gateway_cm.erl @@ -187,8 +187,12 @@ get_chan_info(GwName, ClientId, ChanPid) -> [pid()]. lookup_by_clientid(GwName, ClientId) -> Nodes = mria_mnesia:running_nodes(), - Pids = emqx_gateway_cm_proto_v1:lookup_by_clientid(Nodes, GwName, ClientId), - lists:append([Pid || {ok, Pid} <- Pids]). + case emqx_gateway_cm_proto_v1:lookup_by_clientid(Nodes, GwName, ClientId) of + {Pids, []} -> + lists:append(Pids); + {_, _BadNodes} -> + error(badrpc) + end. %% @doc Update infos of the channel. -spec set_chan_info(gateway_name(), diff --git a/apps/emqx_gateway/src/emqx_gateway_http.erl b/apps/emqx_gateway/src/emqx_gateway_http.erl index 0db2e1b3d..bb4bfa7f9 100644 --- a/apps/emqx_gateway/src/emqx_gateway_http.erl +++ b/apps/emqx_gateway/src/emqx_gateway_http.erl @@ -244,9 +244,11 @@ lookup_client(GwName, ClientId, {M, F}) -> kickout_client(GwName, ClientId) -> Results = [emqx_gateway_cm:kick_session(GwName, ClientId, Pid) || Pid <- emqx_gateway_cm:lookup_by_clientid(GwName, ClientId)], - case Results =:= [] orelse lists:any(fun(Item) -> Item =:= ok end, Results) of - true -> ok; - false -> lists:last(Results) + IsOk = lists:any(fun(Item) -> Item =:= ok end, Results), + case {IsOk, Results} of + {true , _ } -> ok; + {_ , []} -> {error, not_found}; + {false, _ } -> lists:last(Results) end. -spec list_client_subscriptions(gateway_name(), emqx_types:clientid()) diff --git a/apps/emqx_gateway/src/proto/emqx_gateway_cm_proto_v1.erl b/apps/emqx_gateway/src/proto/emqx_gateway_cm_proto_v1.erl index 5862d5567..6aa5521c5 100644 --- a/apps/emqx_gateway/src/proto/emqx_gateway_cm_proto_v1.erl +++ b/apps/emqx_gateway/src/proto/emqx_gateway_cm_proto_v1.erl @@ -38,7 +38,7 @@ introduced_in() -> -spec lookup_by_clientid([node()], emqx_gateway_cm:gateway_name(), emqx_types:clientid()) -> emqx_rpc:multicall_return([pid()]). lookup_by_clientid(Nodes, GwName, ClientId) -> - erpc:multicall(Nodes, emqx_gateway_cm, do_lookup_by_clientid, [GwName, ClientId]). + rpc:multicall(Nodes, emqx_gateway_cm, do_lookup_by_clientid, [GwName, ClientId]). -spec get_chan_info(emqx_gateway_cm:gateway_name(), emqx_types:clientid(), pid()) -> emqx_types:infos() | undefined | {badrpc, _}. diff --git a/apps/emqx_gateway/test/emqx_gateway_cm_SUITE.erl b/apps/emqx_gateway/test/emqx_gateway_cm_SUITE.erl index 7e5fbefb9..558e90bd3 100644 --- a/apps/emqx_gateway/test/emqx_gateway_cm_SUITE.erl +++ b/apps/emqx_gateway/test/emqx_gateway_cm_SUITE.erl @@ -200,6 +200,7 @@ t_kick_session(_) -> 100 -> ?assert(false, "waiting kick msg timeout") end, + ?assertMatch({error, not_found}, emqx_gateway_http:kickout_client(?GWNAME, <<"i-dont-exist">>)), meck:unload(emqx_gateway_cm_registry). t_unexpected_handle(Conf) ->