diff --git a/apps/emqx/src/emqx_persistent_session_ds.erl b/apps/emqx/src/emqx_persistent_session_ds.erl index 8f04d6837..bb078078a 100644 --- a/apps/emqx/src/emqx_persistent_session_ds.erl +++ b/apps/emqx/src/emqx_persistent_session_ds.erl @@ -205,13 +205,14 @@ destroy(#{clientid := ClientID}) -> destroy_session(ClientID) -> session_drop(ClientID, destroy). +-spec kick_offline_session(emqx_types:clientid()) -> ok. kick_offline_session(ClientID) -> - emqx_cm_locker:trans( - ClientID, - fun(_Nodes) -> - session_drop(ClientID, kicked) - end - ). + case emqx_persistent_message:is_persistence_enabled() of + true -> + session_drop(ClientID, kicked); + false -> + ok + end. %%-------------------------------------------------------------------- %% Info, Stats diff --git a/apps/emqx_management/src/emqx_mgmt.erl b/apps/emqx_management/src/emqx_mgmt.erl index 449b7bd91..0a3567fb2 100644 --- a/apps/emqx_management/src/emqx_mgmt.erl +++ b/apps/emqx_management/src/emqx_mgmt.erl @@ -376,6 +376,7 @@ kickout_clients(ClientIds) when is_list(ClientIds) -> emqx_management_proto_v5:kickout_clients(Node, ClientIds) end, Results = lists:map(F, emqx:running_nodes()), + lists:foreach(fun emqx_persistent_session_ds:kick_offline_session/1, ClientIds), case lists:filter(fun(Res) -> Res =/= ok end, Results) of [] -> ok;