fix issue #282 - emqttd_sm optimized
This commit is contained in:
parent
f57e6b43db
commit
b59a8664eb
|
@ -246,8 +246,14 @@ resume_session(#mqtt_session{client_id = ClientId,
|
|||
sess_pid = SessPid}, ClientPid)
|
||||
when node(SessPid) =:= node() ->
|
||||
|
||||
emqttd_session:resume(SessPid, ClientId, ClientPid),
|
||||
{ok, SessPid};
|
||||
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) ->
|
||||
|
|
|
@ -69,14 +69,17 @@ 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)
|
||||
lists:foreach(fun(ClientId) -> mnesia:delete({session, ClientId}) end, ClientIds)
|
||||
end,
|
||||
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};
|
||||
|
||||
|
|
Loading…
Reference in New Issue