From 6b020b4a019ed630d7b126c9d2712b2dbf7bb949 Mon Sep 17 00:00:00 2001 From: DDDHuang <44492639+DDDHuang@users.noreply.github.com> Date: Tue, 25 Jan 2022 10:53:21 +0800 Subject: [PATCH 1/2] fix(api): query client subscriptions from cluster empty check --- apps/emqx_management/src/emqx_mgmt.erl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt.erl b/apps/emqx_management/src/emqx_mgmt.erl index 8148e4487..5909c9dc2 100644 --- a/apps/emqx_management/src/emqx_mgmt.erl +++ b/apps/emqx_management/src/emqx_mgmt.erl @@ -269,10 +269,14 @@ list_authz_cache(ClientId) -> list_client_subscriptions(ClientId) -> Results = [client_subscriptions(Node, ClientId) || Node <- mria_mnesia:running_nodes()], - Expected = lists:filter(fun({error, _}) -> false; - ([]) -> false; - (_) -> true - end, Results), + Filter = + fun + ({error, _}) -> + false; + ({_Node, List}) -> + erlang:is_list(List) andalso 0 < erlang:length(List) + end, + Expected = lists:filter(Filter, Results), case Expected of [] -> []; [Result | _] -> Result From e07ecd52111323d679da0fbb5cabc1d124d01ef1 Mon Sep 17 00:00:00 2001 From: DDDHuang <44492639+DDDHuang@users.noreply.github.com> Date: Tue, 25 Jan 2022 11:10:32 +0800 Subject: [PATCH 2/2] fix(api): client subscriptions formatter fun bad match --- apps/emqx_management/src/emqx_mgmt.erl | 3 +-- .../src/emqx_mgmt_api_clients.erl | 20 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/apps/emqx_management/src/emqx_mgmt.erl b/apps/emqx_management/src/emqx_mgmt.erl index 5909c9dc2..20701b937 100644 --- a/apps/emqx_management/src/emqx_mgmt.erl +++ b/apps/emqx_management/src/emqx_mgmt.erl @@ -276,8 +276,7 @@ list_client_subscriptions(ClientId) -> ({_Node, List}) -> erlang:is_list(List) andalso 0 < erlang:length(List) end, - Expected = lists:filter(Filter, Results), - case Expected of + case lists:filter(Filter, Results) of [] -> []; [Result | _] -> Result end. diff --git a/apps/emqx_management/src/emqx_mgmt_api_clients.erl b/apps/emqx_management/src/emqx_mgmt_api_clients.erl index 9cc5d3016..5cb40d519 100644 --- a/apps/emqx_management/src/emqx_mgmt_api_clients.erl +++ b/apps/emqx_management/src/emqx_mgmt_api_clients.erl @@ -513,11 +513,21 @@ subscribe_batch(post, #{bindings := #{clientid := ClientID}, body := TopicInfos} subscribe_batch(#{clientid => ClientID, topics => Topics}). subscriptions(get, #{bindings := #{clientid := ClientID}}) -> - {Node, Subs0} = emqx_mgmt:list_client_subscriptions(ClientID), - Subs = lists:map(fun({Topic, SubOpts}) -> - #{node => Node, clientid => ClientID, topic => Topic, qos => maps:get(qos, SubOpts)} - end, Subs0), - {200, Subs}. + case emqx_mgmt:list_client_subscriptions(ClientID) of + [] -> + {200, []}; + {Node, Subs} -> + Formatter = + fun({Topic, SubOpts}) -> + #{ + node => Node, + clientid => ClientID, + topic => Topic, + qos => maps:get(qos, SubOpts) + } + end, + {200, lists:map(Formatter, Subs)} + end. set_keepalive(put, #{bindings := #{clientid := ClientID}, query_string := Query}) -> case maps:find(<<"interval">>, Query) of