diff --git a/apps/emqx/src/emqx_channel.erl b/apps/emqx/src/emqx_channel.erl index fc25490c4..7a5edbb48 100644 --- a/apps/emqx/src/emqx_channel.erl +++ b/apps/emqx/src/emqx_channel.erl @@ -1179,14 +1179,13 @@ terminate(_, #channel{conn_state = idle}) -> ok; terminate(normal, Channel) -> run_terminate_hook(normal, Channel); terminate({shutdown, kicked}, Channel) -> - persist_if_session(Channel), run_terminate_hook(kicked, Channel); terminate({shutdown, Reason}, Channel) when Reason =:= discarded; Reason =:= takeovered -> run_terminate_hook(Reason, Channel); terminate(Reason, Channel = #channel{will_msg = WillMsg}) -> (WillMsg =/= undefined) andalso publish_will_msg(WillMsg), - persist_if_session(Channel), + (Reason =:= expired) andalso persist_if_session(Channel), run_terminate_hook(Reason, Channel). persist_if_session(#channel{session = Session} = Channel) -> diff --git a/apps/emqx/src/emqx_cm.erl b/apps/emqx/src/emqx_cm.erl index dbd8dfa63..890dce60a 100644 --- a/apps/emqx/src/emqx_cm.erl +++ b/apps/emqx/src/emqx_cm.erl @@ -58,6 +58,7 @@ , lookup_channels/2 ]). +%% Test/debug interface -export([ all_channels/0 , all_client_ids/0 ]). @@ -397,11 +398,12 @@ with_channel(ClientId, Fun) -> Pids -> Fun(lists:last(Pids)) end. -%% @doc Get all channels registed. +%% @doc Get all registed channel pids. Debugg/test interface all_channels() -> Pat = [{{'_', '$1'}, [], ['$1']}], ets:select(?CHAN_TAB, Pat). +%% @doc Get all registed clientIDs. Debugg/test interface all_client_ids() -> Pat = [{{'$1', '_'}, [], ['$1']}], ets:select(?CHAN_TAB, Pat). diff --git a/apps/emqx/test/emqx_persistent_session_SUITE.erl b/apps/emqx/test/emqx_persistent_session_SUITE.erl index d5637cad2..bcc8d5e69 100644 --- a/apps/emqx/test/emqx_persistent_session_SUITE.erl +++ b/apps/emqx/test/emqx_persistent_session_SUITE.erl @@ -113,8 +113,9 @@ init_per_group(snabbkaffe, Config) -> [ {kill_connection_process, true} | Config]; init_per_group(gc_tests, Config) -> %% We need to make sure the system does not interfere with this test group. - [maybe_kill_connection_process(ClientId, [{kill_connection_process, true}]) - || ClientId <- emqx_cm:all_client_ids()], + lists:foreach(fun(ClientId) -> + maybe_kill_connection_process(ClientId, [{kill_connection_process, true}]) + end, emqx_cm:all_client_ids()), emqx_common_test_helpers:stop_apps([]), SessionMsgEts = gc_tests_session_store, MsgEts = gc_tests_msg_store,