diff --git a/apps/emqx_resource/src/schema/emqx_resource_schema.erl b/apps/emqx_resource/src/schema/emqx_resource_schema.erl index eb0a48b06..59687eb8d 100644 --- a/apps/emqx_resource/src/schema/emqx_resource_schema.erl +++ b/apps/emqx_resource/src/schema/emqx_resource_schema.erl @@ -88,7 +88,7 @@ resource_opts_meta() -> desc => ?DESC(<<"resource_opts">>) }. -worker_pool_size(type) -> non_neg_integer(); +worker_pool_size(type) -> range(1, 1024); worker_pool_size(desc) -> ?DESC("worker_pool_size"); worker_pool_size(default) -> ?WORKER_POOL_SIZE; worker_pool_size(required) -> false; diff --git a/apps/emqx_resource/test/emqx_resource_schema_tests.erl b/apps/emqx_resource/test/emqx_resource_schema_tests.erl index 219861a4e..0935ee1c6 100644 --- a/apps/emqx_resource/test/emqx_resource_schema_tests.erl +++ b/apps/emqx_resource/test/emqx_resource_schema_tests.erl @@ -74,6 +74,44 @@ health_check_interval_validator_test_() -> ) ]. +worker_pool_size_test_() -> + BaseConf = parse(webhook_bridge_health_check_hocon(<<"15s">>)), + Check = fun(WorkerPoolSize) -> + Conf = emqx_utils_maps:deep_put( + [ + <<"bridges">>, + <<"webhook">>, + <<"simple">>, + <<"resource_opts">>, + <<"worker_pool_size">> + ], + BaseConf, + WorkerPoolSize + ), + #{<<"bridges">> := #{<<"webhook">> := #{<<"simple">> := CheckedConf}}} = check(Conf), + #{<<"resource_opts">> := #{<<"worker_pool_size">> := WPS}} = CheckedConf, + WPS + end, + AssertThrow = fun(WorkerPoolSize) -> + ?assertThrow( + {_, [ + #{ + kind := validation_error, + reason := #{expected_type := _}, + value := WorkerPoolSize + } + ]}, + Check(WorkerPoolSize) + ) + end, + [ + ?_assertEqual(1, Check(1)), + ?_assertEqual(100, Check(100)), + ?_assertEqual(1024, Check(1024)), + ?_test(AssertThrow(0)), + ?_test(AssertThrow(1025)) + ]. + %%=========================================================================== %% Helper functions %%=========================================================================== diff --git a/changes/ce/fix-11106.en.md b/changes/ce/fix-11106.en.md new file mode 100644 index 000000000..2fa3053fa --- /dev/null +++ b/changes/ce/fix-11106.en.md @@ -0,0 +1,3 @@ +Added a validation for the maximum number of pool workers of a bridge. + +Now the maximum amount is 1024 to avoid large memory consumption from an unreasonable number of workers.