fix issue #282 - emqttd_sm optimized

This commit is contained in:
Feng Lee 2015-10-10 14:32:33 +08:00
parent f57e6b43db
commit b59a8664eb
2 changed files with 13 additions and 4 deletions

View File

@ -246,8 +246,14 @@ resume_session(#mqtt_session{client_id = ClientId,
sess_pid = SessPid}, ClientPid)
when node(SessPid) =:= node() ->
case is_process_alive(SessPid) of
true ->
emqttd_session:resume(SessPid, ClientId, ClientPid),
{ok, SessPid};
false ->
lager:error("Session(~s): Cannot resume ~p, it seems already dead!", [ClientId, SessPid]),
{error, session_died}
end;
%% Remote node
resume_session(Session = #mqtt_session{client_id = ClientId, sess_pid = SessPid}, ClientPid) ->

View File

@ -69,7 +69,7 @@ handle_info({mnesia_system_event, {mnesia_down, Node}}, State) ->
lager:error("!!!Mnesia node down: ~s", [Node]),
Fun = fun() ->
ClientIds =
mnesia:select(session, [{#mqtt_session{client_id = '$1', sess_pid = '$2'},
mnesia:select(session, [{#mqtt_session{client_id = '$1', sess_pid = '$2', _ = '_'},
[{'==', {node, '$2'}, Node}],
['$1']}]),
lists:foreach(fun(ClientId) -> mnesia:delete({session, ClientId}) end, ClientIds)
@ -77,6 +77,9 @@ handle_info({mnesia_system_event, {mnesia_down, Node}}, State) ->
mnesia:async_dirty(Fun),
{noreply, State};
handle_info({mnesia_system_event, {mnesia_up, _Node}}, State) ->
{noreply, State};
handle_info(tick, State) ->
{noreply, setstats(State), hibernate};