Check max clients (#2859)
This commit is contained in:
parent
b4bbfad415
commit
19a8f0cbf8
|
@ -181,6 +181,11 @@ node.name = emqx@127.0.0.1
|
||||||
## Value: String
|
## Value: String
|
||||||
node.cookie = emqxsecretcookie
|
node.cookie = emqxsecretcookie
|
||||||
|
|
||||||
|
## Node Max Clients Size.
|
||||||
|
##
|
||||||
|
## Value: String
|
||||||
|
node.max_clients = 1024000
|
||||||
|
|
||||||
## Data dir for the node
|
## Data dir for the node
|
||||||
##
|
##
|
||||||
## Value: Folder
|
## Value: Folder
|
||||||
|
|
|
@ -334,6 +334,13 @@ end}.
|
||||||
hidden
|
hidden
|
||||||
]}.
|
]}.
|
||||||
|
|
||||||
|
%% @see node.max_clients
|
||||||
|
{mapping, "node.max_clients", "emqx.max_clients", [
|
||||||
|
{default, 1024000},
|
||||||
|
{datatype, integer},
|
||||||
|
hidden
|
||||||
|
]}.
|
||||||
|
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
%% RPC
|
%% RPC
|
||||||
%%--------------------------------------------------------------------
|
%%--------------------------------------------------------------------
|
||||||
|
|
|
@ -44,6 +44,8 @@
|
||||||
|
|
||||||
-export([lookup_conn_pid/1]).
|
-export([lookup_conn_pid/1]).
|
||||||
|
|
||||||
|
-export([max_client_size/0]).
|
||||||
|
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
-export([ init/1
|
-export([ init/1
|
||||||
, handle_call/3
|
, handle_call/3
|
||||||
|
@ -148,6 +150,9 @@ lookup_conn_pid(ClientId) when is_binary(ClientId) ->
|
||||||
notify(Msg) ->
|
notify(Msg) ->
|
||||||
gen_server:cast(?CM, {notify, Msg}).
|
gen_server:cast(?CM, {notify, Msg}).
|
||||||
|
|
||||||
|
max_client_size() ->
|
||||||
|
ets:info(?CONN_TAB, size).
|
||||||
|
|
||||||
%%-----------------------------------------------------------------------------
|
%%-----------------------------------------------------------------------------
|
||||||
%% gen_server callbacks
|
%% gen_server callbacks
|
||||||
%%-----------------------------------------------------------------------------
|
%%-----------------------------------------------------------------------------
|
||||||
|
|
|
@ -260,10 +260,22 @@ set_protover(_Packet, PState) ->
|
||||||
received(?PACKET(Type), PState = #pstate{connected = false}) when Type =/= ?CONNECT ->
|
received(?PACKET(Type), PState = #pstate{connected = false}) when Type =/= ?CONNECT ->
|
||||||
{error, proto_not_connected, PState};
|
{error, proto_not_connected, PState};
|
||||||
|
|
||||||
|
received(Packet = ?PACKET(?CONNECT), PState = #pstate{connected = false}) ->
|
||||||
|
case check_max_clients() of
|
||||||
|
true ->
|
||||||
|
?LOG(error, "Connection rejected due to max clients limitation"),
|
||||||
|
connack({?RC_QUOTA_EXCEEDED, PState});
|
||||||
|
false ->
|
||||||
|
do_received(Packet, PState)
|
||||||
|
end;
|
||||||
|
|
||||||
received(?PACKET(?CONNECT), PState = #pstate{connected = true}) ->
|
received(?PACKET(?CONNECT), PState = #pstate{connected = true}) ->
|
||||||
{error, proto_unexpected_connect, PState};
|
{error, proto_unexpected_connect, PState};
|
||||||
|
|
||||||
received(Packet = ?PACKET(Type), PState) ->
|
received(Packet, PState) ->
|
||||||
|
do_received(Packet, PState).
|
||||||
|
|
||||||
|
do_received(Packet = ?PACKET(Type), PState) ->
|
||||||
trace(recv, Packet),
|
trace(recv, Packet),
|
||||||
PState1 = set_protover(Packet, PState),
|
PState1 = set_protover(Packet, PState),
|
||||||
try emqx_packet:validate(Packet) of
|
try emqx_packet:validate(Packet) of
|
||||||
|
@ -1048,3 +1060,8 @@ do_acl_check(Action, Credentials, Topic, AllowTerm, DenyTerm) ->
|
||||||
allow -> AllowTerm;
|
allow -> AllowTerm;
|
||||||
deny -> DenyTerm
|
deny -> DenyTerm
|
||||||
end.
|
end.
|
||||||
|
|
||||||
|
check_max_clients() ->
|
||||||
|
CurrentClientSize = emqx_cm:max_client_size(),
|
||||||
|
MaxClients = emqx_config:get_env(max_clients, 1024000),
|
||||||
|
CurrentClientSize >= MaxClients.
|
Loading…
Reference in New Issue