Merge pull request #10923 from zmstone/0602-fix-channel-data-registration-race-condition
fix(emqx_cm): fix channel data registration race-condition
This commit is contained in:
commit
367fc95976
|
@ -176,11 +176,13 @@ insert_channel_info(ClientId, Info, Stats) ->
|
|||
%% Note that: It should be called on a lock transaction
|
||||
register_channel(ClientId, ChanPid, #{conn_mod := ConnMod}) when is_pid(ChanPid) ->
|
||||
Chan = {ClientId, ChanPid},
|
||||
%% cast (for process monitor) before inserting ets tables
|
||||
cast({registered, Chan}),
|
||||
true = ets:insert(?CHAN_TAB, Chan),
|
||||
true = ets:insert(?CHAN_CONN_TAB, {Chan, ConnMod}),
|
||||
ok = emqx_cm_registry:register_channel(Chan),
|
||||
mark_channel_connected(ChanPid),
|
||||
cast({registered, Chan}).
|
||||
ok.
|
||||
|
||||
%% @doc Unregister a channel.
|
||||
-spec unregister_channel(emqx_types:clientid()) -> ok.
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
Fix a race-condition in channel info registration.
|
||||
|
||||
Prior to this fix, when system is under heavy load, it might happen that a client is disconnected (or has its session expired) but still can be found in the clients page in dashboard.
|
||||
One of the possible reasons is a race condition fixed in this PR: the connection is killed in the middle of channel data registration.
|
Loading…
Reference in New Issue