diff --git a/apps/emqx_authn/src/emqx_authn_api.erl b/apps/emqx_authn/src/emqx_authn_api.erl index d053b1c4b..19ec71ec3 100644 --- a/apps/emqx_authn/src/emqx_authn_api.erl +++ b/apps/emqx_authn/src/emqx_authn_api.erl @@ -149,8 +149,8 @@ fields(response_users) -> paginated_list_type(ref(response_user)); fields(pagination_meta) -> [ - {page, non_neg_integer()}, - {limit, non_neg_integer()}, + {page, pos_integer()}, + {limit, pos_integer()}, {count, non_neg_integer()} ]. @@ -431,8 +431,8 @@ schema("/authentication/:id/users") -> description => <<"List users in authenticator in global authentication chain">>, parameters => [ param_auth_id(), - {page, mk(integer(), #{in => query, desc => <<"Page Index">>, required => false})}, - {limit, mk(integer(), #{in => query, desc => <<"Page Limit">>, required => false})}, + {page, mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})}, + {limit, mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})}, {like_username, mk(binary(), #{ in => query, @@ -481,8 +481,8 @@ schema("/listeners/:listener_id/authentication/:id/users") -> parameters => [ param_listener_id(), param_auth_id(), - {page, mk(integer(), #{in => query, desc => <<"Page Index">>, required => false})}, - {limit, mk(integer(), #{in => query, desc => <<"Page Limit">>, required => false})} + {page, mk(pos_integer(), #{in => query, desc => <<"Page Index">>, required => false})}, + {limit, mk(pos_integer(), #{in => query, desc => <<"Page Limit">>, required => false})} ], responses => #{ 200 => emqx_dashboard_swagger:schema_with_example( diff --git a/apps/emqx_connector/src/emqx_connector_http.erl b/apps/emqx_connector/src/emqx_connector_http.erl index 0e1cc3344..f53fa17e5 100644 --- a/apps/emqx_connector/src/emqx_connector_http.erl +++ b/apps/emqx_connector/src/emqx_connector_http.erl @@ -95,7 +95,7 @@ For example: `http://localhost:9901/` , desc => "The type of the pool. Can be one of `random`, `hash`." })} , {pool_size, - sc(non_neg_integer(), + sc(pos_integer(), #{ default => 8 , desc => "The pool size." })} diff --git a/apps/emqx_connector/src/emqx_connector_mongo.erl b/apps/emqx_connector/src/emqx_connector_mongo.erl index fbf42ba75..391075800 100644 --- a/apps/emqx_connector/src/emqx_connector_mongo.erl +++ b/apps/emqx_connector/src/emqx_connector_mongo.erl @@ -76,7 +76,9 @@ fields(sharded) -> , {w_mode, fun w_mode/1} ] ++ mongo_fields(); fields(topology) -> - [ {pool_size, fun internal_pool_size/1} + [ {pool_size, fun emqx_connector_schema_lib:pool_size/1} + %% TODO: what is this + %% 'max_overflow' , {max_overflow, fun emqx_connector_schema_lib:pool_size/1} , {overflow_ttl, fun duration/1} , {overflow_check_period, fun duration/1} @@ -114,12 +116,6 @@ mongo_fields() -> ] ++ emqx_connector_schema_lib:ssl_fields(). -internal_pool_size(type) -> integer(); -internal_pool_size(desc) -> "Pool size on start."; -internal_pool_size(default) -> 1; -internal_pool_size(validator) -> [?MIN(1)]; -internal_pool_size(_) -> undefined. - %% =================================================================== on_start(InstId, Config = #{mongo_type := Type, diff --git a/apps/emqx_connector/src/emqx_connector_schema_lib.erl b/apps/emqx_connector/src/emqx_connector_schema_lib.erl index 7ad058e64..53fae8d31 100644 --- a/apps/emqx_connector/src/emqx_connector_schema_lib.erl +++ b/apps/emqx_connector/src/emqx_connector_schema_lib.erl @@ -34,7 +34,7 @@ ]). -type database() :: binary(). --type pool_size() :: integer(). +-type pool_size() :: pos_integer(). -type username() :: binary(). -type password() :: binary(). @@ -72,7 +72,7 @@ database(required) -> true; database(validator) -> [?NOT_EMPTY("the value of the field 'database' cannot be empty")]; database(_) -> undefined. -pool_size(type) -> integer(); +pool_size(type) -> pos_integer(); pool_size(desc) -> "Size of the connection pool."; pool_size(default) -> 8; pool_size(validator) -> [?MIN(1)]; diff --git a/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl b/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl index 355b86aaf..25291059d 100644 --- a/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl +++ b/apps/emqx_connector/src/mqtt/emqx_connector_mqtt_schema.erl @@ -93,7 +93,7 @@ topic filters for 'remote_topic' of ingress connections. "messages in case of ACK not received.", #{default => "15s"})} , {max_inflight, - sc(integer(), + sc(non_neg_integer(), #{ default => 32 , desc => "Max inflight (sent, but un-acked) messages of the MQTT protocol" })} diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl index 7ef374ec3..8630803ec 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl @@ -127,7 +127,7 @@ namespace() -> "public". fields(page) -> Desc = <<"Page number of the results to fetch.">>, Meta = #{in => query, desc => Desc, default => 1, example => 1}, - [{page, hoconsc:mk(integer(), Meta)}]; + [{page, hoconsc:mk(pos_integer(), Meta)}]; fields(limit) -> Desc = iolist_to_binary([ <<"Results per page(max ">>, diff --git a/apps/emqx_exhook/src/emqx_exhook_schema.erl b/apps/emqx_exhook/src/emqx_exhook_schema.erl index 06a98e920..81d6ef33b 100644 --- a/apps/emqx_exhook/src/emqx_exhook_schema.erl +++ b/apps/emqx_exhook/src/emqx_exhook_schema.erl @@ -50,55 +50,36 @@ fields(exhook) -> )} ]; fields(server) -> - [ - {name, - sc( - binary(), - #{desc => "Name of the exhook server."} - )}, - {enable, - sc( - boolean(), - #{ - default => true, - desc => "Enable the exhook server." - } - )}, - {url, - sc( - binary(), - #{desc => "URL of the gRPC server."} - )}, - {request_timeout, - sc( - duration(), - #{ - default => "5s", - desc => "The timeout to request gRPC server." - } - )}, - {failed_action, failed_action()}, - {ssl, sc(ref(ssl_conf), #{})}, - {auto_reconnect, - sc( - hoconsc:union([false, duration()]), - #{ - default => "60s", - desc => - "Whether to automatically reconnect (initialize) the gRPC server.
" - "When gRPC is not available, exhook tries to request the gRPC service at " - "that interval and reinitialize the list of mounted hooks." - } - )}, - {pool_size, - sc( - integer(), - #{ - default => 8, - example => 8, - desc => "The process pool size for gRPC client." - } - )} + [ {name, sc(binary(), + #{ desc => "Name of the exhook server." + })} + , {enable, sc(boolean(), + #{ default => true + , desc => "Enable the exhook server." + })} + , {url, sc(binary(), + #{ desc => "URL of the gRPC server." + })} + , {request_timeout, sc(duration(), + #{ default => "5s" + , desc => "The timeout to request gRPC server." + })} + , {failed_action, failed_action()} + , {ssl, + sc(ref(ssl_conf), #{})} + , {auto_reconnect, + sc(hoconsc:union([false, duration()]), + #{ default => "60s" + , desc => "Whether to automatically reconnect (initialize) the gRPC server.
" + "When gRPC is not available, exhook tries to request the gRPC service at " + "that interval and reinitialize the list of mounted hooks." + })} + , {pool_size, + sc(pos_integer(), + #{ default => 8 + , example => 8 + , desc => "The process pool size for gRPC client." + })} ]; fields(ssl_conf) -> Schema = emqx_schema:client_ssl_opts_schema(#{}), diff --git a/apps/emqx_gateway/src/emqx_gateway_api_authn.erl b/apps/emqx_gateway/src/emqx_gateway_api_authn.erl index 644b44574..9b37145f8 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_authn.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_authn.erl @@ -384,7 +384,7 @@ params_paging_in_qs() -> [ {page, mk( - integer(), + pos_integer(), #{ in => query, required => false, @@ -394,7 +394,7 @@ params_paging_in_qs() -> )}, {limit, mk( - integer(), + pos_integer(), #{ in => query, required => false, diff --git a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl index dfeceb24e..c9870d828 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_clients.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_clients.erl @@ -664,7 +664,7 @@ params_paging() -> [ {page, mk( - integer(), + pos_integer(), #{ in => query, required => false, @@ -674,7 +674,7 @@ params_paging() -> )}, {limit, mk( - integer(), + pos_integer(), #{ in => query, desc => <<"Page Limit">>, diff --git a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl index 44d938c60..77e4b48aa 100644 --- a/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl +++ b/apps/emqx_gateway/src/emqx_gateway_api_listeners.erl @@ -191,7 +191,7 @@ users(get, #{bindings := #{name := Name0, id := Id}, query_string := Qs}) -> Name0, Id, fun(_GwName, #{id := AuthId, chain_name := ChainName}) -> - emqx_authn_api:list_users(ChainName, AuthId, page_pramas(Qs)) + emqx_authn_api:list_users(ChainName, AuthId, page_params(Qs)) end ); users(post, #{ @@ -261,7 +261,7 @@ import_users(post, #{ %%-------------------------------------------------------------------- %% Utils -page_pramas(Qs) -> +page_params(Qs) -> maps:with([<<"page">>, <<"limit">>], Qs). %%-------------------------------------------------------------------- @@ -555,7 +555,7 @@ params_paging_in_qs() -> [ {page, mk( - integer(), + pos_integer(), #{ in => query, required => false, @@ -565,7 +565,7 @@ params_paging_in_qs() -> )}, {limit, mk( - integer(), + pos_integer(), #{ in => query, required => false, diff --git a/apps/emqx_modules/src/emqx_delayed_api.erl b/apps/emqx_modules/src/emqx_delayed_api.erl index 4029646af..47c714037 100644 --- a/apps/emqx_modules/src/emqx_delayed_api.erl +++ b/apps/emqx_modules/src/emqx_delayed_api.erl @@ -149,9 +149,9 @@ schema("/mqtt/delayed/messages") -> [ {data, mk(hoconsc:array(ref("message")), #{})}, {meta, [ - {page, mk(integer(), #{})}, - {limit, mk(integer(), #{})}, - {count, mk(integer(), #{})} + {page, mk(pos_integer(), #{})}, + {limit, mk(pos_integer(), #{})}, + {count, mk(non_neg_integer(), #{})} ]} ] } diff --git a/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl b/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl index 98072ba9c..801c5ff51 100644 --- a/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl +++ b/apps/emqx_slow_subs/src/emqx_slow_subs_api.erl @@ -50,8 +50,8 @@ schema(("/slow_subscriptions")) -> }, get => #{tags => [<<"slow subs">>], description => <<"Get slow topics statistics record data">>, - parameters => [ {page, mk(integer(), #{in => query})} - , {limit, mk(integer(), #{in => query})} + parameters => [ {page, mk(pos_integer(), #{in => query})} + , {limit, mk(pos_integer(), #{in => query})} ], 'requestBody' => [], responses => #{200 => [{data, mk(hoconsc:array(ref(record)), #{})}]} diff --git a/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl b/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl index 7cefbac21..fec10839d 100644 --- a/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl +++ b/apps/emqx_slow_subs/test/emqx_slow_subs_api_SUITE.erl @@ -96,7 +96,7 @@ t_get_history(_) -> lists:foreach(Each, lists:seq(1, 5)), - {ok, Data} = request_api(get, api_path(["slow_subscriptions"]), "_page=1&_limit=10", + {ok, Data} = request_api(get, api_path(["slow_subscriptions"]), "page=1&limit=10", auth_header_()), #{<<"data">> := [First | _]} = emqx_json:decode(Data, [return_maps]), diff --git a/rebar.config b/rebar.config index 75a5da56a..75d156e01 100644 --- a/rebar.config +++ b/rebar.config @@ -47,7 +47,7 @@ [ {lc, {git, "https://github.com/emqx/lc.git", {tag, "0.2.1"}}} , {redbug, "2.0.7"} , {gpb, "4.11.2"} %% gpb only used to build, but not for release, pin it here to avoid fetching a wrong version due to rebar plugins scattered in all the deps - , {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.8.6"}}} + , {typerefl, {git, "https://github.com/ieQu1/typerefl", {tag, "0.9.0"}}} , {ehttpc, {git, "https://github.com/emqx/ehttpc", {tag, "0.1.12"}}} , {gproc, {git, "https://github.com/uwiger/gproc", {tag, "0.8.0"}}} , {jiffy, {git, "https://github.com/emqx/jiffy", {tag, "1.0.5"}}}