fix: bulk subscribe topics failed in the client.connected hook

This commit is contained in:
Shawn 2023-01-10 16:43:24 +08:00
parent 52343e58c7
commit 73643e932f
1 changed files with 8 additions and 5 deletions

View File

@ -718,15 +718,18 @@ subscribe(#{clientid := ClientID, topic := Topic} = Sub) ->
end. end.
subscribe_batch(#{clientid := ClientID, topics := Topics}) -> subscribe_batch(#{clientid := ClientID, topics := Topics}) ->
case lookup(#{clientid => ClientID}) of %% We use emqx_channel instead of emqx_channel_info (used by the emqx_mgmt:lookup_client/2),
{200, _} -> %% as the emqx_channel_info table will only be populated after the hook `client.connected`
%% has returned. So if one want to subscribe topics in this hook, it will fail.
case ets:lookup(emqx_channel, ClientID) of
[] ->
{404, ?CLIENT_ID_NOT_FOUND};
_ ->
ArgList = [ ArgList = [
[ClientID, Topic, maps:with([qos, nl, rap, rh], Sub)] [ClientID, Topic, maps:with([qos, nl, rap, rh], Sub)]
|| #{topic := Topic} = Sub <- Topics || #{topic := Topic} = Sub <- Topics
], ],
{200, emqx_mgmt_util:batch_operation(?MODULE, do_subscribe, ArgList)}; {200, emqx_mgmt_util:batch_operation(?MODULE, do_subscribe, ArgList)}
{404, ?CLIENT_ID_NOT_FOUND} ->
{404, ?CLIENT_ID_NOT_FOUND}
end. end.
unsubscribe(#{clientid := ClientID, topic := Topic}) -> unsubscribe(#{clientid := ClientID, topic := Topic}) ->