fix(ets_model): use only ChanPid as key to save memory

This commit is contained in:
Thales Macedo Garitezi 2021-11-08 12:15:04 -03:00
parent 0955122468
commit 6d37d2df68
No known key found for this signature in database
GPG Key ID: DD279F8152A9B6DD
3 changed files with 12 additions and 14 deletions

View File

@ -1536,9 +1536,8 @@ ensure_connected(Channel = #channel{conninfo = ConnInfo,
clientinfo = ClientInfo}) ->
NConnInfo = ConnInfo#{connected_at => erlang:system_time(millisecond)},
ok = run_hooks('client.connected', [ClientInfo, NConnInfo]),
ClientID = info(clientid, Channel),
Chan = {ClientID, self()},
emqx_cm:increment_connected_client_count(Chan),
ChanPid = self(),
emqx_cm:increment_connected_client_count(ChanPid),
Channel#channel{conninfo = NConnInfo,
conn_state = connected
}.
@ -1627,9 +1626,8 @@ ensure_disconnected(Reason, Channel = #channel{conninfo = ConnInfo,
clientinfo = ClientInfo}) ->
NConnInfo = ConnInfo#{disconnected_at => erlang:system_time(millisecond)},
ok = run_hooks('client.disconnected', [ClientInfo, Reason, NConnInfo]),
ClientID = info(clientid, Channel),
Chan = {ClientID, self()},
emqx_cm:decrement_connected_client_count(Chan),
ChanPid = self(),
emqx_cm:decrement_connected_client_count(ChanPid),
Channel#channel{conninfo = NConnInfo, conn_state = disconnected}.
%%--------------------------------------------------------------------

View File

@ -470,7 +470,7 @@ handle_info({'DOWN', _MRef, process, Pid, _Reason}, State = #{chan_pmon := PMon}
Chan = {ClientID, ChanPid},
case ets:lookup(?CHAN_INFO_TAB, Chan) of
[{Chan, #{conn_state := connected}, _}] ->
decrement_connected_client_count(Chan);
decrement_connected_client_count(ChanPid);
_ ->
ok
end
@ -513,14 +513,14 @@ get_chann_conn_mod(ClientId, ChanPid) when node(ChanPid) == node() ->
get_chann_conn_mod(ClientId, ChanPid) ->
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, #{}),
ets:insert_new(?CONN_CLIENT_TAB, {Chan, true}),
ets:insert_new(?CONN_CLIENT_TAB, {ChanPid, true}),
ok.
decrement_connected_client_count(Chan) ->
decrement_connected_client_count(ChanPid) ->
?tp(emqx_cm_connected_client_count_dec, #{}),
ets:delete(?CONN_CLIENT_TAB, Chan),
ets:delete(?CONN_CLIENT_TAB, ChanPid),
ok.
get_connected_client_count() ->

View File

@ -502,11 +502,11 @@ t_connect_client_never_negative({init, Config}) ->
t_connect_client_never_negative(Config) when is_list(Config) ->
?assertEqual(0, emqx_cm:get_connected_client_count()),
%% would go to -1
Chan = {<<"clientid">>, list_to_pid("<0.0.1>")},
emqx_cm:decrement_connected_client_count(Chan),
ChanPid = list_to_pid("<0.0.1>"),
emqx_cm:decrement_connected_client_count(ChanPid),
?assertEqual(0, emqx_cm:get_connected_client_count()),
%% 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()),
ok;
t_connect_client_never_negative({'end', _Config}) ->