fix(ets_model): use only ChanPid as key to save memory
This commit is contained in:
parent
0955122468
commit
6d37d2df68
|
@ -1536,9 +1536,8 @@ ensure_connected(Channel = #channel{conninfo = ConnInfo,
|
||||||
clientinfo = ClientInfo}) ->
|
clientinfo = ClientInfo}) ->
|
||||||
NConnInfo = ConnInfo#{connected_at => erlang:system_time(millisecond)},
|
NConnInfo = ConnInfo#{connected_at => erlang:system_time(millisecond)},
|
||||||
ok = run_hooks('client.connected', [ClientInfo, NConnInfo]),
|
ok = run_hooks('client.connected', [ClientInfo, NConnInfo]),
|
||||||
ClientID = info(clientid, Channel),
|
ChanPid = self(),
|
||||||
Chan = {ClientID, self()},
|
emqx_cm:increment_connected_client_count(ChanPid),
|
||||||
emqx_cm:increment_connected_client_count(Chan),
|
|
||||||
Channel#channel{conninfo = NConnInfo,
|
Channel#channel{conninfo = NConnInfo,
|
||||||
conn_state = connected
|
conn_state = connected
|
||||||
}.
|
}.
|
||||||
|
@ -1627,9 +1626,8 @@ ensure_disconnected(Reason, Channel = #channel{conninfo = ConnInfo,
|
||||||
clientinfo = ClientInfo}) ->
|
clientinfo = ClientInfo}) ->
|
||||||
NConnInfo = ConnInfo#{disconnected_at => erlang:system_time(millisecond)},
|
NConnInfo = ConnInfo#{disconnected_at => erlang:system_time(millisecond)},
|
||||||
ok = run_hooks('client.disconnected', [ClientInfo, Reason, NConnInfo]),
|
ok = run_hooks('client.disconnected', [ClientInfo, Reason, NConnInfo]),
|
||||||
ClientID = info(clientid, Channel),
|
ChanPid = self(),
|
||||||
Chan = {ClientID, self()},
|
emqx_cm:decrement_connected_client_count(ChanPid),
|
||||||
emqx_cm:decrement_connected_client_count(Chan),
|
|
||||||
Channel#channel{conninfo = NConnInfo, conn_state = disconnected}.
|
Channel#channel{conninfo = NConnInfo, conn_state = disconnected}.
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
|
@ -470,7 +470,7 @@ handle_info({'DOWN', _MRef, process, Pid, _Reason}, State = #{chan_pmon := PMon}
|
||||||
Chan = {ClientID, ChanPid},
|
Chan = {ClientID, ChanPid},
|
||||||
case ets:lookup(?CHAN_INFO_TAB, Chan) of
|
case ets:lookup(?CHAN_INFO_TAB, Chan) of
|
||||||
[{Chan, #{conn_state := connected}, _}] ->
|
[{Chan, #{conn_state := connected}, _}] ->
|
||||||
decrement_connected_client_count(Chan);
|
decrement_connected_client_count(ChanPid);
|
||||||
_ ->
|
_ ->
|
||||||
ok
|
ok
|
||||||
end
|
end
|
||||||
|
@ -513,14 +513,14 @@ get_chann_conn_mod(ClientId, ChanPid) when node(ChanPid) == node() ->
|
||||||
get_chann_conn_mod(ClientId, ChanPid) ->
|
get_chann_conn_mod(ClientId, ChanPid) ->
|
||||||
rpc_call(node(ChanPid), get_chann_conn_mod, [ClientId, ChanPid], ?T_GET_INFO).
|
rpc_call(node(ChanPid), get_chann_conn_mod, [ClientId, ChanPid], ?T_GET_INFO).
|
||||||
|
|
||||||
increment_connected_client_count(Chan) ->
|
increment_connected_client_count(ChanPid) ->
|
||||||
?tp(emqx_cm_connected_client_count_inc, #{}),
|
?tp(emqx_cm_connected_client_count_inc, #{}),
|
||||||
ets:insert_new(?CONN_CLIENT_TAB, {Chan, true}),
|
ets:insert_new(?CONN_CLIENT_TAB, {ChanPid, true}),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
decrement_connected_client_count(Chan) ->
|
decrement_connected_client_count(ChanPid) ->
|
||||||
?tp(emqx_cm_connected_client_count_dec, #{}),
|
?tp(emqx_cm_connected_client_count_dec, #{}),
|
||||||
ets:delete(?CONN_CLIENT_TAB, Chan),
|
ets:delete(?CONN_CLIENT_TAB, ChanPid),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
get_connected_client_count() ->
|
get_connected_client_count() ->
|
||||||
|
|
|
@ -502,11 +502,11 @@ t_connect_client_never_negative({init, Config}) ->
|
||||||
t_connect_client_never_negative(Config) when is_list(Config) ->
|
t_connect_client_never_negative(Config) when is_list(Config) ->
|
||||||
?assertEqual(0, emqx_cm:get_connected_client_count()),
|
?assertEqual(0, emqx_cm:get_connected_client_count()),
|
||||||
%% would go to -1
|
%% would go to -1
|
||||||
Chan = {<<"clientid">>, list_to_pid("<0.0.1>")},
|
ChanPid = list_to_pid("<0.0.1>"),
|
||||||
emqx_cm:decrement_connected_client_count(Chan),
|
emqx_cm:decrement_connected_client_count(ChanPid),
|
||||||
?assertEqual(0, emqx_cm:get_connected_client_count()),
|
?assertEqual(0, emqx_cm:get_connected_client_count()),
|
||||||
%% would be 0, if really went to -1
|
%% would be 0, if really went to -1
|
||||||
emqx_cm:increment_connected_client_count(Chan),
|
emqx_cm:increment_connected_client_count(ChanPid),
|
||||||
?assertEqual(1, emqx_cm:get_connected_client_count()),
|
?assertEqual(1, emqx_cm:get_connected_client_count()),
|
||||||
ok;
|
ok;
|
||||||
t_connect_client_never_negative({'end', _Config}) ->
|
t_connect_client_never_negative({'end', _Config}) ->
|
||||||
|
|
Loading…
Reference in New Issue