Remove 'tuple call' and be compatible with Erlang/OTP R21
This commit is contained in:
parent
1de94b6858
commit
385c7cd3e6
|
@ -133,26 +133,22 @@ handle_call(Req, _From, State) ->
|
|||
emqx_logger:error("[CM] Unexpected request: ~p", [Req]),
|
||||
{reply, ignore, State}.
|
||||
|
||||
handle_cast({notify, {registered, ClientId, Pid}},
|
||||
State = #state{client_pmon = PMon}) ->
|
||||
{noreply, State#state{client_pmon = PMon:monitor(Pid, ClientId)}};
|
||||
handle_cast({notify, {registered, ClientId, Pid}}, State = #state{client_pmon = PMon}) ->
|
||||
{noreply, State#state{client_pmon = emqx_pmon:monitor(Pid, ClientId, PMon)}};
|
||||
|
||||
handle_cast({notify, {unregistered, _ClientId, Pid}},
|
||||
State = #state{client_pmon = PMon}) ->
|
||||
{noreply, State#state{client_pmon = PMon:demonitor(Pid)}};
|
||||
handle_cast({notify, {unregistered, _ClientId, Pid}}, State = #state{client_pmon = PMon}) ->
|
||||
{noreply, State#state{client_pmon = emqx_pmon:demonitor(Pid, PMon)}};
|
||||
|
||||
handle_cast(Msg, State) ->
|
||||
emqx_logger:error("[CM] Unexpected msg: ~p", [Msg]),
|
||||
{noreply, State}.
|
||||
|
||||
handle_info({'DOWN', _MRef, process, DownPid, _Reason},
|
||||
State = #state{client_pmon = PMon}) ->
|
||||
case PMon:find(DownPid) of
|
||||
undefined ->
|
||||
{noreply, State};
|
||||
ClientId ->
|
||||
handle_info({'DOWN', _MRef, process, DownPid, _Reason}, State = #state{client_pmon = PMon}) ->
|
||||
case emqx_pmon:find(DownPid, PMon) of
|
||||
undefined -> {noreply, State};
|
||||
ClientId ->
|
||||
unregister_client({ClientId, DownPid}),
|
||||
{noreply, State#state{client_pmon = PMon:erase(DownPid)}}
|
||||
{noreply, State#state{client_pmon = emqx_pmon:erase(DownPid, PMon)}}
|
||||
end;
|
||||
|
||||
handle_info(Info, State) ->
|
||||
|
|
|
@ -35,10 +35,9 @@ monitor(Pid, PM) ->
|
|||
|
||||
monitor(Pid, Val, PM = {?MODULE, [M]}) ->
|
||||
case maps:is_key(Pid, M) of
|
||||
true -> PM;
|
||||
false ->
|
||||
Ref = erlang:monitor(process, Pid),
|
||||
{?MODULE, [maps:put(Pid, {Ref, Val}, M)]}
|
||||
true -> PM;
|
||||
false -> Ref = erlang:monitor(process, Pid),
|
||||
{?MODULE, [maps:put(Pid, {Ref, Val}, M)]}
|
||||
end.
|
||||
|
||||
-spec(demonitor(pid(), pmon()) -> pmon()).
|
||||
|
@ -48,8 +47,7 @@ demonitor(Pid, PM = {?MODULE, [M]}) ->
|
|||
%% Don't flush
|
||||
_ = erlang:demonitor(Ref),
|
||||
{?MODULE, [maps:remove(Pid, M)]};
|
||||
error ->
|
||||
PM
|
||||
error -> PM
|
||||
end.
|
||||
|
||||
-spec(find(pid(), pmon()) -> undefined | term()).
|
||||
|
|
|
@ -116,7 +116,7 @@ init([]) ->
|
|||
init_monitors() ->
|
||||
mnesia:foldl(
|
||||
fun(#shared_subscription{subpid = SubPid}, Mon) ->
|
||||
Mon:monitor(SubPid)
|
||||
emqx_pmon:monitor(SubPid, Mon)
|
||||
end, emqx_pmon:new(), ?TAB).
|
||||
|
||||
handle_call(Req, _From, State) ->
|
||||
|
@ -124,7 +124,7 @@ handle_call(Req, _From, State) ->
|
|||
{reply, ignore, State}.
|
||||
|
||||
handle_cast({monitor, SubPid}, State= #state{pmon = PMon}) ->
|
||||
{noreply, update_stats(State#state{pmon = PMon:monitor(SubPid)})};
|
||||
{noreply, update_stats(State#state{pmon = emqx_pmon:monitor(SubPid, PMon)})};
|
||||
|
||||
handle_cast(Msg, State) ->
|
||||
emqx_logger:error("[Shared] Unexpected msg: ~p", [Msg]),
|
||||
|
@ -132,11 +132,11 @@ handle_cast(Msg, State) ->
|
|||
|
||||
handle_info({mnesia_table_event, {write, NewRecord, _}}, State = #state{pmon = PMon}) ->
|
||||
#shared_subscription{subpid = SubPid} = NewRecord,
|
||||
{noreply, update_stats(State#state{pmon = PMon:monitor(SubPid)})};
|
||||
{noreply, update_stats(State#state{pmon = emqx_pmon:monitor(SubPid, PMon)})};
|
||||
|
||||
handle_info({mnesia_table_event, {delete_object, OldRecord, _}}, State = #state{pmon = PMon}) ->
|
||||
#shared_subscription{subpid = SubPid} = OldRecord,
|
||||
{noreply, update_stats(State#state{pmon = PMon:demonitor(SubPid)})};
|
||||
{noreply, update_stats(State#state{pmon = emqx_pmon:demonitor(SubPid, PMon)})};
|
||||
|
||||
handle_info({mnesia_table_event, _Event}, State) ->
|
||||
{noreply, State};
|
||||
|
@ -144,7 +144,7 @@ handle_info({mnesia_table_event, _Event}, State) ->
|
|||
handle_info({'DOWN', _MRef, process, SubPid, _Reason}, State = #state{pmon = PMon}) ->
|
||||
emqx_logger:info("Shared subscription down: ~p", [SubPid]),
|
||||
mnesia:async_dirty(fun cleanup_down/1, [SubPid]),
|
||||
{noreply, update_stats(State#state{pmon = PMon:erase(SubPid)})};
|
||||
{noreply, update_stats(State#state{pmon = emqx_pmon:erase(SubPid, PMon)})};
|
||||
|
||||
handle_info(Info, State) ->
|
||||
emqx_logger:error("[Shared] Unexpected info: ~p", [Info]),
|
||||
|
@ -162,12 +162,8 @@ code_change(_OldVsn, State, _Extra) ->
|
|||
|
||||
cleanup_down(SubPid) ->
|
||||
Pat = #shared_subscription{_ = '_', subpid = SubPid},
|
||||
lists:foreach(fun(Record) ->
|
||||
mnesia:delete_object(?TAB, Record)
|
||||
end, mnesia:match_object(Pat)).
|
||||
lists:foreach(fun(Record) -> mnesia:delete_object(?TAB, Record) end, mnesia:match_object(Pat)).
|
||||
|
||||
update_stats(State) ->
|
||||
emqx_stats:setstat('subscriptions/shared/count',
|
||||
'subscriptions/shared/max',
|
||||
ets:info(?TAB, size)), State.
|
||||
emqx_stats:setstat('subscriptions/shared/count', 'subscriptions/shared/max', ets:info(?TAB, size)), State.
|
||||
|
||||
|
|
|
@ -216,26 +216,22 @@ handle_call(Req, _From, State) ->
|
|||
emqx_logger:error("[SM] Unexpected request: ~p", [Req]),
|
||||
{reply, ignore, State}.
|
||||
|
||||
handle_cast({notify, {registered, ClientId, SessionPid}},
|
||||
State = #state{session_pmon = PMon}) ->
|
||||
{noreply, State#state{session_pmon = PMon:monitor(SessionPid, ClientId)}};
|
||||
handle_cast({notify, {registered, ClientId, SessionPid}}, State = #state{session_pmon = PMon}) ->
|
||||
{noreply, State#state{session_pmon = emqx_pmon:monitor(SessionPid, ClientId, PMon)}};
|
||||
|
||||
handle_cast({notify, {unregistered, _ClientId, SessionPid}},
|
||||
State = #state{session_pmon = PMon}) ->
|
||||
{noreply, State#state{session_pmon = PMon:demonitor(SessionPid)}};
|
||||
handle_cast({notify, {unregistered, _ClientId, SessionPid}}, State = #state{session_pmon = PMon}) ->
|
||||
{noreply, State#state{session_pmon = emqx_pmon:demonitor(SessionPid, PMon)}};
|
||||
|
||||
handle_cast(Msg, State) ->
|
||||
emqx_logger:error("[SM] Unexpected msg: ~p", [Msg]),
|
||||
{noreply, State}.
|
||||
|
||||
handle_info({'DOWN', _MRef, process, DownPid, _Reason},
|
||||
State = #state{session_pmon = PMon}) ->
|
||||
case PMon:find(DownPid) of
|
||||
undefined ->
|
||||
{noreply, State};
|
||||
ClientId ->
|
||||
handle_info({'DOWN', _MRef, process, DownPid, _Reason}, State = #state{session_pmon = PMon}) ->
|
||||
case emqx_pmon:find(DownPid, PMon) of
|
||||
undefined -> {noreply, State};
|
||||
ClientId ->
|
||||
unregister_session({ClientId, DownPid}),
|
||||
{noreply, State#state{session_pmon = PMon:erase(DownPid)}}
|
||||
{noreply, State#state{session_pmon = emqx_pmon:erase(DownPid, PMon)}}
|
||||
end;
|
||||
|
||||
handle_info(Info, State) ->
|
||||
|
|
Loading…
Reference in New Issue