From 19e101445c5877611035e42f3023990b8e5c25e6 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Tue, 2 Aug 2022 14:59:12 -0300 Subject: [PATCH 1/2] feat: add option to gc after TLS/SSL handshake --- CHANGES-5.0.md | 1 + apps/emqx/i18n/emqx_schema_i18n.conf | 17 ++++++++++++++ apps/emqx/rebar.config | 2 +- apps/emqx/src/emqx_schema.erl | 10 +++++++- apps/emqx/test/emqx_schema_tests.erl | 35 ++++++++++++++++++++++++++++ mix.exs | 2 +- rebar.config | 2 +- 7 files changed, 65 insertions(+), 4 deletions(-) diff --git a/CHANGES-5.0.md b/CHANGES-5.0.md index 4dd74823c..a7d37d5b4 100644 --- a/CHANGES-5.0.md +++ b/CHANGES-5.0.md @@ -34,6 +34,7 @@ * Improve authentication tracing. [#8554](https://github.com/emqx/emqx/pull/8554) * Standardize the '/listeners' and `/gateway//listeners` API fields. It will introduce some incompatible updates, see [#8571](https://github.com/emqx/emqx/pull/8571) +* Add option to perform GC on connection process after TLS/SSL handshake is performed. [#8637](https://github.com/emqx/emqx/pull/8637) # 5.0.3 diff --git a/apps/emqx/i18n/emqx_schema_i18n.conf b/apps/emqx/i18n/emqx_schema_i18n.conf index 330c766d1..63667dd22 100644 --- a/apps/emqx/i18n/emqx_schema_i18n.conf +++ b/apps/emqx/i18n/emqx_schema_i18n.conf @@ -1841,6 +1841,23 @@ Maximum time duration allowed for the handshake to complete } } +server_ssl_opts_schema_gc_after_handshake { + desc { + en: """ +Performance tuning. If enabled, will immediately perform a GC after +the TLS/SSL handshake is established. +""" + zh: """ +性能调整。 如果启用,将在TLS/SSL握手建立后立即执行GC。 +TLS/SSL握手建立后立即进行GC。 +""" + } + label: { + en: "Perform GC after handshake" + zh: "握手后执行GC" + } +} + fields_listeners_tcp { desc { en: """ diff --git a/apps/emqx/rebar.config b/apps/emqx/rebar.config index b33840aaa..f09092e2b 100644 --- a/apps/emqx/rebar.config +++ b/apps/emqx/rebar.config @@ -26,7 +26,7 @@ {gproc, {git, "https://github.com/uwiger/gproc", {tag, "0.8.0"}}}, {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}}, {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}}, - {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.3"}}}, + {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}}, {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.13.3"}}}, {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}}, {hocon, {git, "https://github.com/emqx/hocon.git", {tag, "0.29.0"}}}, diff --git a/apps/emqx/src/emqx_schema.erl b/apps/emqx/src/emqx_schema.erl index 9f96595ed..b55e84e7b 100644 --- a/apps/emqx/src/emqx_schema.erl +++ b/apps/emqx/src/emqx_schema.erl @@ -1953,7 +1953,15 @@ server_ssl_opts_schema(Defaults, IsRanchListener) -> } )} || IsRanchListener - ] + ] ++ + [ + {"gc_after_handshake", + sc(boolean(), #{ + default => false, + desc => ?DESC(server_ssl_opts_schema_gc_after_handshake) + })} + || not IsRanchListener + ] ]. %% @doc Make schema for SSL client. diff --git a/apps/emqx/test/emqx_schema_tests.erl b/apps/emqx/test/emqx_schema_tests.erl index 2e776a368..a40026d4c 100644 --- a/apps/emqx/test/emqx_schema_tests.erl +++ b/apps/emqx/test/emqx_schema_tests.erl @@ -141,3 +141,38 @@ bad_tls_version_test() -> validate(Sc, #{<<"versions">> => [<<"foo">>]}) ), ok. + +ssl_opts_gc_after_handshake_test_rancher_listener_test() -> + Sc = emqx_schema:server_ssl_opts_schema( + #{ + gc_after_handshake => false + }, + _IsRanchListener = true + ), + ?assertThrow( + {_Sc, [ + #{ + kind := validation_error, + reason := unknown_fields, + unknown := <<"gc_after_handshake">> + } + ]}, + validate(Sc, #{<<"gc_after_handshake">> => true}) + ), + ok. + +ssl_opts_gc_after_handshake_test_not_rancher_listener_test() -> + Sc = emqx_schema:server_ssl_opts_schema( + #{ + gc_after_handshake => false + }, + _IsRanchListener = false + ), + Checked = validate(Sc, #{<<"gc_after_handshake">> => <<"true">>}), + ?assertMatch( + #{ + gc_after_handshake := true + }, + Checked + ), + ok. diff --git a/mix.exs b/mix.exs index d49051ab7..78ba36490 100644 --- a/mix.exs +++ b/mix.exs @@ -51,7 +51,7 @@ defmodule EMQXUmbrella.MixProject do {:gproc, github: "uwiger/gproc", tag: "0.8.0", override: true}, {:jiffy, github: "emqx/jiffy", tag: "1.0.5", override: true}, {:cowboy, github: "emqx/cowboy", tag: "2.9.0", override: true}, - {:esockd, github: "emqx/esockd", tag: "5.9.3", override: true}, + {:esockd, github: "emqx/esockd", tag: "5.9.4", override: true}, {:ekka, github: "emqx/ekka", tag: "0.13.3", override: true}, {:gen_rpc, github: "emqx/gen_rpc", tag: "2.8.1", override: true}, {:grpc, github: "emqx/grpc-erl", tag: "0.6.6", override: true}, diff --git a/rebar.config b/rebar.config index 3d3d5968f..f91841f8d 100644 --- a/rebar.config +++ b/rebar.config @@ -53,7 +53,7 @@ , {gproc, {git, "https://github.com/uwiger/gproc", {tag, "0.8.0"}}} , {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}} , {cowboy, {git, "https://github.com/emqx/cowboy", {tag, "2.9.0"}}} - , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.3"}}} + , {esockd, {git, "https://github.com/emqx/esockd", {tag, "5.9.4"}}} , {ekka, {git, "https://github.com/emqx/ekka", {tag, "0.13.3"}}} , {gen_rpc, {git, "https://github.com/emqx/gen_rpc", {tag, "2.8.1"}}} , {grpc, {git, "https://github.com/emqx/grpc-erl", {tag, "0.6.6"}}} From 7f932d64be4a93cfc6b7cc6f82f17c12e6cae5d1 Mon Sep 17 00:00:00 2001 From: Thales Macedo Garitezi Date: Wed, 3 Aug 2022 09:37:27 -0300 Subject: [PATCH 2/2] docs: adjust descriptions Co-authored-by: Zaiming (Stone) Shi --- apps/emqx/i18n/emqx_schema_i18n.conf | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/emqx/i18n/emqx_schema_i18n.conf b/apps/emqx/i18n/emqx_schema_i18n.conf index 63667dd22..1fc91c9cd 100644 --- a/apps/emqx/i18n/emqx_schema_i18n.conf +++ b/apps/emqx/i18n/emqx_schema_i18n.conf @@ -1844,11 +1844,11 @@ Maximum time duration allowed for the handshake to complete server_ssl_opts_schema_gc_after_handshake { desc { en: """ -Performance tuning. If enabled, will immediately perform a GC after -the TLS/SSL handshake is established. +Memory usage tuning. If enabled, will immediately perform a garbage collection after +the TLS/SSL handshake. """ zh: """ -性能调整。 如果启用,将在TLS/SSL握手建立后立即执行GC。 +内存使用调优。如果启用,将在TLS/SSL握手完成后立即执行垃圾回收。 TLS/SSL握手建立后立即进行GC。 """ }