From b5d507bad83790f6dbad2b382b316ead9b73ba92 Mon Sep 17 00:00:00 2001 From: firest Date: Sun, 30 Jun 2024 20:06:04 +0800 Subject: [PATCH 1/2] fix: limit gateway connections with license --- .../src/emqx_gateway_cm_registry.erl | 20 ++++++++++++++++++- apps/emqx_license/src/emqx_license.app.src | 2 +- .../src/emqx_license_resources.erl | 3 ++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/apps/emqx_gateway/src/emqx_gateway_cm_registry.erl b/apps/emqx_gateway/src/emqx_gateway_cm_registry.erl index 97e7179be..75d9d10f4 100644 --- a/apps/emqx_gateway/src/emqx_gateway_cm_registry.erl +++ b/apps/emqx_gateway/src/emqx_gateway_cm_registry.erl @@ -28,7 +28,7 @@ unregister_channel/2 ]). --export([lookup_channels/2]). +-export([lookup_channels/2, get_connected_client_count/0]). -export([tabname/1]). @@ -95,6 +95,24 @@ lookup_channels(Name, ClientId) -> record(ClientId, ChanPid) -> #channel{chid = ClientId, pid = ChanPid}. +get_connected_client_count() -> + Gatewyas = emqx_gateway_utils:find_gateway_definitions(), + Fun = fun(#{name := Name}, Acc) -> + Tab = tabname(Name), + case ets:whereis(Tab) of + undefined -> + Acc; + _ -> + case ets:info(Tab, size) of + undefined -> + Acc; + Size -> + Acc + Size + end + end + end, + lists:foldl(Fun, 0, Gatewyas). + %%-------------------------------------------------------------------- %% gen_server callbacks %%-------------------------------------------------------------------- diff --git a/apps/emqx_license/src/emqx_license.app.src b/apps/emqx_license/src/emqx_license.app.src index 195248e51..05805006c 100644 --- a/apps/emqx_license/src/emqx_license.app.src +++ b/apps/emqx_license/src/emqx_license.app.src @@ -3,6 +3,6 @@ {vsn, "5.1.0"}, {modules, []}, {registered, [emqx_license_sup]}, - {applications, [kernel, stdlib, emqx_ctl]}, + {applications, [kernel, stdlib, emqx_ctl, emqx_gateway]}, {mod, {emqx_license_app, []}} ]}. diff --git a/apps/emqx_license/src/emqx_license_resources.erl b/apps/emqx_license/src/emqx_license_resources.erl index 4e969d883..0e496c6d2 100644 --- a/apps/emqx_license/src/emqx_license_resources.erl +++ b/apps/emqx_license/src/emqx_license_resources.erl @@ -56,7 +56,8 @@ local_connection_count() -> -spec connection_count() -> non_neg_integer(). connection_count() -> - local_connection_count() + cached_remote_connection_count(). + local_connection_count() + cached_remote_connection_count() + + emqx_gateway_cm_registry:get_connected_client_count(). %%------------------------------------------------------------------------------ %% gen_server callbacks From b38b4ee5a27e0f29b9c18923f45607cf98e53992 Mon Sep 17 00:00:00 2001 From: firest Date: Mon, 1 Jul 2024 16:37:11 +0800 Subject: [PATCH 2/2] chore: update changes --- changes/ee/fix-13372.en.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/ee/fix-13372.en.md diff --git a/changes/ee/fix-13372.en.md b/changes/ee/fix-13372.en.md new file mode 100644 index 000000000..e1723dfc5 --- /dev/null +++ b/changes/ee/fix-13372.en.md @@ -0,0 +1 @@ +Fixed that the license did not count the number of gateway connections