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.
subscribe_batch(#{clientid := ClientID, topics := Topics}) ->
case lookup(#{clientid => ClientID}) of
{200, _} ->
%% We use emqx_channel instead of emqx_channel_info (used by the emqx_mgmt:lookup_client/2),
%% 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 = [
[ClientID, Topic, maps:with([qos, nl, rap, rh], Sub)]
|| #{topic := Topic} = Sub <- Topics
],
{200, emqx_mgmt_util:batch_operation(?MODULE, do_subscribe, ArgList)};
{404, ?CLIENT_ID_NOT_FOUND} ->
{404, ?CLIENT_ID_NOT_FOUND}
{200, emqx_mgmt_util:batch_operation(?MODULE, do_subscribe, ArgList)}
end.
unsubscribe(#{clientid := ClientID, topic := Topic}) ->