From ddbb8560fa3043315e44721658d3432fdbde6abd Mon Sep 17 00:00:00 2001 From: "Zaiming (Stone) Shi" Date: Fri, 8 Dec 2023 17:58:53 +0100 Subject: [PATCH] fix(dialyzer): batch 2 --- .../emqx_authn_password_hashing.erl | 5 ++-- .../emqx_authn/proto/emqx_authn_proto_v1.erl | 2 +- .../src/emqx_authz/emqx_authz_rule.erl | 29 +++++++++++++++---- .../emqx_authz/proto/emqx_authz_proto_v1.erl | 2 +- .../src/emqx_auth_mnesia.app.src | 5 ++-- .../src/emqx_authz_mnesia.erl | 6 ++-- .../src/proto/emqx_bridge_proto_v1.erl | 6 ++-- .../src/proto/emqx_bridge_proto_v2.erl | 8 ++--- .../src/proto/emqx_bridge_proto_v3.erl | 8 ++--- .../src/proto/emqx_bridge_proto_v4.erl | 8 ++--- .../src/proto/emqx_bridge_proto_v5.erl | 14 ++++----- .../src/emqx_bridge_mqtt_egress.erl | 3 +- .../src/emqx_bridge_pulsar_impl_producer.erl | 6 ++-- .../emqx_bridge_syskeeper_proxy_server.erl | 2 +- apps/emqx_conf/src/emqx_conf.erl | 4 +-- .../src/emqx_connector_jwt_sup.erl | 2 +- .../src/proto/emqx_connector_proto_v1.erl | 4 +-- .../src/emqx_dashboard_swagger.erl | 4 +-- apps/emqx_durable_storage/src/emqx_ds.erl | 1 + .../emqx_durable_storage/src/emqx_ds_conf.erl | 20 ++++++++----- apps/emqx_durable_storage/src/emqx_ds_lts.erl | 7 ++++- .../src/emqx_ds_replication_layer.erl | 6 ++-- .../src/emqx_ds_replication_layer_meta.erl | 2 +- .../src/emqx_ds_storage_layer.erl | 27 ++++++++++++----- .../src/emqx_ds_storage_layer_sup.erl | 2 +- .../src/proto/emqx_ds_proto_v1.erl | 5 ++-- apps/emqx_exhook/src/emqx_exhook_mgr.erl | 4 +++ apps/emqx_exhook/src/emqx_exhook_sup.erl | 6 +++- apps/emqx_ft/src/emqx_ft.app.src | 2 +- apps/emqx_ft/src/emqx_ft_api.erl | 2 +- apps/emqx_ft/src/emqx_ft_storage_exporter.erl | 2 +- apps/emqx_ft/src/emqx_ft_storage_fs.erl | 3 +- .../emqx_ft/src/emqx_ft_storage_fs_reader.erl | 4 +-- .../src/bhvrs/emqx_gateway_channel.erl | 8 ++--- .../src/bhvrs/emqx_gateway_conn.erl | 2 +- .../src/bhvrs/emqx_gateway_frame.erl | 14 ++++----- .../src/emqx_gateway_registry.erl | 2 ++ apps/emqx_utils/src/emqx_placeholder.erl | 2 ++ 38 files changed, 148 insertions(+), 91 deletions(-) diff --git a/apps/emqx_auth/src/emqx_authn/emqx_authn_password_hashing.erl b/apps/emqx_auth/src/emqx_authn/emqx_authn_password_hashing.erl index 16af4fd23..0f5aee691 100644 --- a/apps/emqx_auth/src/emqx_authn/emqx_authn_password_hashing.erl +++ b/apps/emqx_auth/src/emqx_authn/emqx_authn_password_hashing.erl @@ -201,7 +201,8 @@ gen_salt(#{name := Other}) when Other =/= plain, Other =/= bcrypt -> <> = crypto:strong_rand_bytes(16), iolist_to_binary(io_lib:format("~32.16.0b", [X])). --spec hash(algorithm_rw(), emqx_passwd:password()) -> {emqx_passwd:hash(), emqx_passwd:salt()}. +-spec hash(algorithm_rw(), emqx_passwd:password()) -> + {emqx_passwd:password_hash(), emqx_passwd:salt()}. hash(#{name := bcrypt, salt_rounds := _} = Algorithm, Password) -> Salt0 = gen_salt(Algorithm), Hash = emqx_passwd:hash({bcrypt, Salt0}, Password), @@ -231,7 +232,7 @@ hash(#{name := Other, salt_position := SaltPosition} = Algorithm, Password) -> -spec check_password( algorithm(), emqx_passwd:salt(), - emqx_passwd:hash(), + emqx_passwd:password_hash(), emqx_passwd:password() ) -> boolean(). check_password(#{name := bcrypt}, _Salt, PasswordHash, Password) -> diff --git a/apps/emqx_auth/src/emqx_authn/proto/emqx_authn_proto_v1.erl b/apps/emqx_auth/src/emqx_authn/proto/emqx_authn_proto_v1.erl index cb0f2641c..3272ddcf7 100644 --- a/apps/emqx_auth/src/emqx_authn/proto/emqx_authn_proto_v1.erl +++ b/apps/emqx_auth/src/emqx_authn/proto/emqx_authn_proto_v1.erl @@ -31,7 +31,7 @@ introduced_in() -> "5.0.0". -spec lookup_from_all_nodes([node()], atom(), binary()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, ChainName, AuthenticatorID) -> erpc:multicall( Nodes, emqx_authn_api, lookup_from_local_node, [ChainName, AuthenticatorID], ?TIMEOUT diff --git a/apps/emqx_auth/src/emqx_authz/emqx_authz_rule.erl b/apps/emqx_auth/src/emqx_authz/emqx_authz_rule.erl index ad6dec56b..eba0ee554 100644 --- a/apps/emqx_auth/src/emqx_authz/emqx_authz_rule.erl +++ b/apps/emqx_auth/src/emqx_authz/emqx_authz_rule.erl @@ -16,10 +16,6 @@ -module(emqx_authz_rule). --include_lib("emqx/include/logger.hrl"). --include_lib("emqx/include/emqx_placeholder.hrl"). --include("emqx_authz.hrl"). - -ifdef(TEST). -compile(export_all). -compile(nowarn_export_all). @@ -29,9 +25,16 @@ -export([ match/4, matches/4, - compile/1 + compile/1, + compile/4 ]). +-export_type([action/0, action_precompile/0]). + +-include_lib("emqx/include/logger.hrl"). +-include_lib("emqx/include/emqx_placeholder.hrl"). +-include("emqx_authz.hrl"). + -type permission() :: allow | deny. -type who_condition() :: @@ -73,8 +76,24 @@ topic_condition/0 ]). +-type action_precompile() :: + subscribe + | publish + | {subscribe, list()} + | {publish, list()} + | all. + +-type topic_filter() :: emqx_types:topic(). + +-type rule_precompile() :: {permission(), who_condition(), action_precompile(), [topic_filter()]}. + -define(IS_PERMISSION(Permission), (Permission =:= allow orelse Permission =:= deny)). +-spec compile(permission(), who_condition(), action_precompile(), [topic_filter()]) -> rule(). +compile(Permission, Who, Action, TopicFilters) -> + compile({Permission, Who, Action, TopicFilters}). + +-spec compile({permission(), all} | rule_precompile()) -> rule(). compile({Permission, all}) when ?IS_PERMISSION(Permission) -> diff --git a/apps/emqx_auth/src/emqx_authz/proto/emqx_authz_proto_v1.erl b/apps/emqx_auth/src/emqx_authz/proto/emqx_authz_proto_v1.erl index 1671b39a3..d8d949ba2 100644 --- a/apps/emqx_auth/src/emqx_authz/proto/emqx_authz_proto_v1.erl +++ b/apps/emqx_auth/src/emqx_authz/proto/emqx_authz_proto_v1.erl @@ -31,6 +31,6 @@ introduced_in() -> "5.0.0". -spec lookup_from_all_nodes([node()], atom()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, Type) -> erpc:multicall(Nodes, emqx_authz_api_sources, lookup_from_local_node, [Type], ?TIMEOUT). diff --git a/apps/emqx_auth_mnesia/src/emqx_auth_mnesia.app.src b/apps/emqx_auth_mnesia/src/emqx_auth_mnesia.app.src index 5cc2c2a31..3dbdf6625 100644 --- a/apps/emqx_auth_mnesia/src/emqx_auth_mnesia.app.src +++ b/apps/emqx_auth_mnesia/src/emqx_auth_mnesia.app.src @@ -1,14 +1,15 @@ %% -*- mode: erlang -*- {application, emqx_auth_mnesia, [ {description, "EMQX Buitl-in Database Authentication and Authorization"}, - {vsn, "0.1.1"}, + {vsn, "0.1.2"}, {registered, []}, {mod, {emqx_auth_mnesia_app, []}}, {applications, [ kernel, stdlib, emqx, - emqx_auth + emqx_auth, + esasl ]}, {env, []}, {modules, []}, diff --git a/apps/emqx_auth_mnesia/src/emqx_authz_mnesia.erl b/apps/emqx_auth_mnesia/src/emqx_authz_mnesia.erl index 7e8e463b3..27000b7a3 100644 --- a/apps/emqx_auth_mnesia/src/emqx_authz_mnesia.erl +++ b/apps/emqx_auth_mnesia/src/emqx_authz_mnesia.erl @@ -32,7 +32,9 @@ -type clientid() :: {clientid, binary()}. -type who() :: username() | clientid() | all. --type rule() :: {emqx_authz_rule:permission(), emqx_authz_rule:action(), emqx_types:topic()}. +-type rule() :: { + emqx_authz_rule:permission(), emqx_authz_rule:action_precompile(), emqx_types:topic() +}. -type rules() :: [rule()]. -record(emqx_acl, { @@ -223,7 +225,7 @@ do_get_rules(Key) -> do_authorize(_Client, _PubSub, _Topic, []) -> nomatch; do_authorize(Client, PubSub, Topic, [{Permission, Action, TopicFilter} | Tail]) -> - Rule = emqx_authz_rule:compile({Permission, all, Action, [TopicFilter]}), + Rule = emqx_authz_rule:compile(Permission, all, Action, [TopicFilter]), case emqx_authz_rule:match(Client, PubSub, Topic, Rule) of {matched, Permission} -> {matched, Permission}; nomatch -> do_authorize(Client, PubSub, Topic, Tail) diff --git a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v1.erl b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v1.erl index 88554893b..2d65d4506 100644 --- a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v1.erl +++ b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v1.erl @@ -69,7 +69,7 @@ stop_bridge_to_node(Node, BridgeType, BridgeName) -> ). -spec restart_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -80,7 +80,7 @@ restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec stop_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -91,7 +91,7 @@ stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, diff --git a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v2.erl b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v2.erl index bcf6ca198..bd58f6d35 100644 --- a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v2.erl +++ b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v2.erl @@ -82,7 +82,7 @@ stop_bridge_to_node(Node, BridgeType, BridgeName) -> ). -spec restart_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -93,7 +93,7 @@ restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec start_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -104,7 +104,7 @@ start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec stop_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -115,7 +115,7 @@ stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, diff --git a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v3.erl b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v3.erl index 0b496364a..2724318aa 100644 --- a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v3.erl +++ b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v3.erl @@ -88,7 +88,7 @@ stop_bridge_to_node(Node, BridgeType, BridgeName) -> ). -spec restart_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -99,7 +99,7 @@ restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec start_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -110,7 +110,7 @@ start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec stop_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -121,7 +121,7 @@ stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, diff --git a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v4.erl b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v4.erl index 937065e41..d90c661f1 100644 --- a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v4.erl +++ b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v4.erl @@ -80,7 +80,7 @@ stop_bridge_to_node(Node, BridgeType, BridgeName) -> ). -spec restart_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -91,7 +91,7 @@ restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec start_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -102,7 +102,7 @@ start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec stop_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -113,7 +113,7 @@ stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, diff --git a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v5.erl b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v5.erl index 75b99f0ec..5995b96f1 100644 --- a/apps/emqx_bridge/src/proto/emqx_bridge_proto_v5.erl +++ b/apps/emqx_bridge/src/proto/emqx_bridge_proto_v5.erl @@ -86,7 +86,7 @@ stop_bridge_to_node(Node, BridgeType, BridgeName) -> ). -spec restart_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -97,7 +97,7 @@ restart_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec start_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -108,7 +108,7 @@ start_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec stop_bridges_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -119,7 +119,7 @@ stop_bridges_to_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -147,7 +147,7 @@ v2_list_bridges_on_nodes(Nodes) -> erpc:multicall(Nodes, emqx_bridge_v2, list, [], ?TIMEOUT). -spec v2_lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). v2_lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, @@ -158,7 +158,7 @@ v2_lookup_from_all_nodes(Nodes, BridgeType, BridgeName) -> ). -spec v2_get_metrics_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). v2_get_metrics_from_all_nodes(Nodes, ActionType, ActionName) -> erpc:multicall( Nodes, @@ -169,7 +169,7 @@ v2_get_metrics_from_all_nodes(Nodes, ActionType, ActionName) -> ). -spec v2_start_bridge_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(ok). v2_start_bridge_to_all_nodes(Nodes, BridgeType, BridgeName) -> erpc:multicall( Nodes, diff --git a/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_egress.erl b/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_egress.erl index 2d50d92ce..a9415294c 100644 --- a/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_egress.erl +++ b/apps/emqx_bridge_mqtt/src/emqx_bridge_mqtt_egress.erl @@ -104,8 +104,7 @@ connect(Pid, Name) -> config(#{remote := RC = #{}} = Conf) -> Conf#{remote => emqx_bridge_mqtt_msg:parse(RC)}. --spec send(pid(), message(), egress()) -> - ok. +-spec send(pid(), message(), egress()) -> ok. send(Pid, MsgIn, Egress) -> emqtt:publish(Pid, export_msg(MsgIn, Egress)). diff --git a/apps/emqx_bridge_pulsar/src/emqx_bridge_pulsar_impl_producer.erl b/apps/emqx_bridge_pulsar/src/emqx_bridge_pulsar_impl_producer.erl index fed0142c5..53847ff5f 100644 --- a/apps/emqx_bridge_pulsar/src/emqx_bridge_pulsar_impl_producer.erl +++ b/apps/emqx_bridge_pulsar/src/emqx_bridge_pulsar_impl_producer.erl @@ -23,7 +23,7 @@ -type state() :: #{ pulsar_client_id := pulsar_client_id(), producers := pulsar_producers:producers(), - sync_timeout := infinity | time:time(), + sync_timeout := erlang:timeout(), message_template := message_template() }. -type buffer_mode() :: memory | disk | hybrid. @@ -43,8 +43,8 @@ bridge_name := atom(), buffer := #{ mode := buffer_mode(), - per_partition_limit := emqx_schema:byte_size(), - segment_bytes := emqx_schema:byte_size(), + per_partition_limit := emqx_schema:bytesize(), + segment_bytes := emqx_schema:bytesize(), memory_overload_protection := boolean() }, compression := compression_mode(), diff --git a/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper_proxy_server.erl b/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper_proxy_server.erl index 057d7579c..187ca1c64 100644 --- a/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper_proxy_server.erl +++ b/apps/emqx_bridge_syskeeper/src/emqx_bridge_syskeeper_proxy_server.erl @@ -31,7 +31,7 @@ socket := inet:socket(), frame_state := undefined - | emqx_bridge_sysk_frame:state(), + | emqx_bridge_syskeeper_frame:state(), buffer := binary(), conf := map() }. diff --git a/apps/emqx_conf/src/emqx_conf.erl b/apps/emqx_conf/src/emqx_conf.erl index 0d2ee72e4..e452bc58e 100644 --- a/apps/emqx_conf/src/emqx_conf.erl +++ b/apps/emqx_conf/src/emqx_conf.erl @@ -43,12 +43,12 @@ %% API %% @doc Adds a new config handler to emqx_config_handler. --spec add_handler(emqx_config:config_key_path(), module()) -> ok. +-spec add_handler(emqx_utils_maps:config_key_path(), module()) -> ok. add_handler(ConfKeyPath, HandlerName) -> emqx_config_handler:add_handler(ConfKeyPath, HandlerName). %% @doc remove config handler from emqx_config_handler. --spec remove_handler(emqx_config:config_key_path()) -> ok. +-spec remove_handler(emqx_utils_maps:config_key_path()) -> ok. remove_handler(ConfKeyPath) -> emqx_config_handler:remove_handler(ConfKeyPath). diff --git a/apps/emqx_connector/src/emqx_connector_jwt_sup.erl b/apps/emqx_connector/src/emqx_connector_jwt_sup.erl index 4076cc725..764352a8a 100644 --- a/apps/emqx_connector/src/emqx_connector_jwt_sup.erl +++ b/apps/emqx_connector/src/emqx_connector_jwt_sup.erl @@ -48,7 +48,7 @@ init([]) -> %% `emqx_connector_jwt_sup:ensure_jwt/1' to ensure that a JWT has %% been stored, if synchronization is needed. -spec ensure_worker_present(worker_id(), map()) -> - {ok, supervisor:child()} | {error, term()}. + {ok, pid()} | {error, term()}. ensure_worker_present(Id, Config) -> ChildSpec = jwt_worker_child_spec(Id, Config), case supervisor:start_child(?MODULE, ChildSpec) of diff --git a/apps/emqx_connector/src/proto/emqx_connector_proto_v1.erl b/apps/emqx_connector/src/proto/emqx_connector_proto_v1.erl index 0cfb831e8..74a6349e5 100644 --- a/apps/emqx_connector/src/proto/emqx_connector_proto_v1.erl +++ b/apps/emqx_connector/src/proto/emqx_connector_proto_v1.erl @@ -42,7 +42,7 @@ list_connectors_on_nodes(Nodes) -> -type key() :: atom() | binary() | [byte()]. -spec lookup_from_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). lookup_from_all_nodes(Nodes, ConnectorType, ConnectorName) -> erpc:multicall( Nodes, @@ -64,7 +64,7 @@ start_connector_to_node(Node, ConnectorType, ConnectorName) -> ). -spec start_connectors_to_all_nodes([node()], key(), key()) -> - emqx_rpc:erpc_multicall(). + emqx_rpc:erpc_multicall(term()). start_connectors_to_all_nodes(Nodes, ConnectorType, ConnectorName) -> erpc:multicall( Nodes, diff --git a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl index 022c6fcb0..a62c205ea 100644 --- a/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl +++ b/apps/emqx_dashboard/src/emqx_dashboard_swagger.erl @@ -181,12 +181,12 @@ fields(hasnext) -> fields(meta) -> fields(page) ++ fields(limit) ++ fields(count) ++ fields(hasnext). --spec schema_with_example(hocon_schema:type(), term()) -> hocon_schema:field_schema_map(). +-spec schema_with_example(hocon_schema:type(), term()) -> hocon_schema:field_schema(). schema_with_example(Type, Example) -> hoconsc:mk(Type, #{examples => #{<<"example">> => Example}}). -spec schema_with_examples(hocon_schema:type(), map() | list(tuple())) -> - hocon_schema:field_schema_map(). + hocon_schema:field_schema(). schema_with_examples(Type, Examples) -> hoconsc:mk(Type, #{examples => #{<<"examples">> => Examples}}). diff --git a/apps/emqx_durable_storage/src/emqx_ds.erl b/apps/emqx_durable_storage/src/emqx_ds.erl index 649341eb5..4516a3c86 100644 --- a/apps/emqx_durable_storage/src/emqx_ds.erl +++ b/apps/emqx_durable_storage/src/emqx_ds.erl @@ -43,6 +43,7 @@ stream_rank/0, iterator/0, message_id/0, + message_store_opts/0, next_result/1, next_result/0, store_batch_result/0, make_iterator_result/1, make_iterator_result/0, diff --git a/apps/emqx_durable_storage/src/emqx_ds_conf.erl b/apps/emqx_durable_storage/src/emqx_ds_conf.erl index 5633cdf58..d9e1efd57 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_conf.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_conf.erl @@ -11,11 +11,17 @@ -export([iteration_options/1]). -export([default_iteration_options/0]). +-export_type([ + backend_config/0, + iteration_options/0 +]). + -type backend_config() :: - {emqx_ds_message_storage_bitmask, emqx_ds_message_storage_bitmask:options()} + {emqx_ds_message_storage_bitmask, emqx_ds_storage_bitfield_lts:options()} | {module(), _Options}. --export_type([backend_config/0]). +-type keyspace() :: atom(). +-type iteration_options() :: map(). %%================================================================================ %% API funcions @@ -23,7 +29,7 @@ -define(APP, emqx_ds). --spec keyspace_config(emqx_ds:keyspace()) -> backend_config(). +-spec keyspace_config(keyspace()) -> backend_config(). keyspace_config(Keyspace) -> DefaultKeyspaceConfig = application:get_env( ?APP, @@ -33,8 +39,8 @@ keyspace_config(Keyspace) -> Keyspaces = application:get_env(?APP, keyspace_config, #{}), maps:get(Keyspace, Keyspaces, DefaultKeyspaceConfig). --spec iteration_options(emqx_ds:keyspace()) -> - emqx_ds_message_storage_bitmask:iteration_options(). +-spec iteration_options(keyspace()) -> + iteration_options(). iteration_options(Keyspace) -> case keyspace_config(Keyspace) of {emqx_ds_message_storage_bitmask, Config} -> @@ -43,7 +49,7 @@ iteration_options(Keyspace) -> default_iteration_options() end. --spec default_iteration_options() -> emqx_ds_message_storage_bitmask:iteration_options(). +-spec default_iteration_options() -> iteration_options(). default_iteration_options() -> {emqx_ds_message_storage_bitmask, Config} = default_keyspace_config(), maps:get(iteration, Config). @@ -60,7 +66,7 @@ default_keyspace_config() -> } }}. --spec db_options(emqx_ds:keyspace()) -> emqx_ds_storage_layer:db_options(). +-spec db_options(keyspace()) -> emqx_ds_storage_layer:options(). db_options(Keyspace) -> DefaultDBOptions = application:get_env(?APP, default_db_options, []), Keyspaces = application:get_env(?APP, keyspace_config, #{}), diff --git a/apps/emqx_durable_storage/src/emqx_ds_lts.erl b/apps/emqx_durable_storage/src/emqx_ds_lts.erl index d148e8cbc..bcf95852d 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_lts.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_lts.erl @@ -24,7 +24,12 @@ %% Debug: -export([trie_next/3, trie_insert/3, dump_to_dot/2]). --export_type([options/0, static_key/0, trie/0]). +-export_type([ + options/0, + static_key/0, + trie/0, + msg_storage_key/0 +]). -include_lib("stdlib/include/ms_transform.hrl"). diff --git a/apps/emqx_durable_storage/src/emqx_ds_replication_layer.erl b/apps/emqx_durable_storage/src/emqx_ds_replication_layer.erl index 7a26b696d..a9d904da1 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_replication_layer.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_replication_layer.erl @@ -90,7 +90,7 @@ ?enc := emqx_ds_storage_layer:iterator() }. --type message_id() :: emqx_ds_storage_layer:message_id(). +-type message_id() :: emqx_ds:message_id(). -define(batch_messages, 2). @@ -219,7 +219,7 @@ do_store_batch_v1(DB, Shard, #{?tag := ?BATCH, ?batch_messages := Messages}, Opt emqx_ds_storage_layer:store_batch({DB, Shard}, Messages, Options). -spec do_get_streams_v1( - emqx_ds:db(), emqx_ds_replicationi_layer:shard_id(), emqx_ds:topic_filter(), emqx_ds:time() + emqx_ds:db(), emqx_ds_replication_layer:shard_id(), emqx_ds:topic_filter(), emqx_ds:time() ) -> [{integer(), emqx_ds_storage_layer:stream()}]. do_get_streams_v1(DB, Shard, TopicFilter, StartTime) -> @@ -227,7 +227,7 @@ do_get_streams_v1(DB, Shard, TopicFilter, StartTime) -> -spec do_make_iterator_v1( emqx_ds:db(), - emqx_ds_storage_layer:shard_id(), + emqx_ds_replication_layer:shard_id(), emqx_ds_storage_layer:stream(), emqx_ds:topic_filter(), emqx_ds:time() diff --git a/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl b/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl index 5c451206d..a2fc9dbbf 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_replication_layer_meta.erl @@ -280,7 +280,7 @@ in_sync_replicas_trans(DB, Shard) -> {error, no_shard} end. --spec set_leader_trans(emqx_ds:ds(), emqx_ds_replication_layer:shard_id(), node()) -> +-spec set_leader_trans(emqx_ds:db(), emqx_ds_replication_layer:shard_id(), node()) -> ok. set_leader_trans(DB, Shard, Node) -> [Record0] = mnesia:wread({?SHARD_TAB, {DB, Shard}}), diff --git a/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl b/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl index 54530f428..99feea77a 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_storage_layer.erl @@ -26,7 +26,16 @@ %% internal exports: -export([db_dir/1]). --export_type([gen_id/0, generation/0, cf_refs/0, stream/0, iterator/0]). +-export_type([ + gen_id/0, + generation/0, + cf_refs/0, + stream/0, + iterator/0, + shard_id/0, + options/0, + prototype/0 +]). -include_lib("snabbkaffe/include/snabbkaffe.hrl"). @@ -64,7 +73,7 @@ ?enc := term() }. -%% Note: this might be stored permanently on a remote node. +%% Note: this might be stred permanently on a remote node. -opaque iterator() :: #{ ?tag := ?IT, @@ -109,17 +118,19 @@ %% Shard (runtime): -type shard() :: shard(generation()). +-type options() :: map(). + %%================================================================================ %% Generation callbacks %%================================================================================ %% Create the new schema given generation id and the options. %% Create rocksdb column families. --callback create(shard_id(), rocksdb:db_handle(), gen_id(), _Options) -> +-callback create(shard_id(), rocksdb:db_handle(), gen_id(), Options :: map()) -> {_Schema, cf_refs()}. %% Open the existing schema --callback open(shard_id(), rocsdb:db_handle(), gen_id(), cf_refs(), _Schema) -> +-callback open(shard_id(), rocksdb:db_handle(), gen_id(), cf_refs(), _Schema) -> _Data. -callback store_batch(shard_id(), _Data, [emqx_types:message()], emqx_ds:message_store_opts()) -> @@ -138,7 +149,7 @@ %% API for the replication layer %%================================================================================ --spec open_shard(shard_id(), emqx_ds:builtin_db_opts()) -> ok. +-spec open_shard(shard_id(), options()) -> ok. open_shard(Shard, Options) -> emqx_ds_storage_layer_sup:ensure_shard(Shard, Options). @@ -215,13 +226,13 @@ next(Shard, Iter = #{?tag := ?IT, ?generation := GenId, ?enc := GenIter0}, Batch -define(REF(ShardId), {via, gproc, {n, l, {?MODULE, ShardId}}}). --spec start_link(shard_id(), emqx_ds:builtin_db_opts()) -> +-spec start_link(shard_id(), options()) -> {ok, pid()}. start_link(Shard = {_, _}, Options) -> gen_server:start_link(?REF(Shard), ?MODULE, {Shard, Options}, []). -record(s, { - shard_id :: emqx_ds:shard_id(), + shard_id :: shard_id(), db :: rocksdb:db_handle(), cf_refs :: cf_refs(), schema :: shard_schema(), @@ -352,7 +363,7 @@ commit_metadata(#s{shard_id = ShardId, schema = Schema, shard = Runtime, db = DB ok = put_schema_persistent(DB, Schema), put_schema_runtime(ShardId, Runtime). --spec rocksdb_open(shard_id(), emqx_ds:builtin_db_opts()) -> +-spec rocksdb_open(shard_id(), options()) -> {ok, rocksdb:db_handle(), cf_refs()} | {error, _TODO}. rocksdb_open(Shard, Options) -> DBOptions = [ diff --git a/apps/emqx_durable_storage/src/emqx_ds_storage_layer_sup.erl b/apps/emqx_durable_storage/src/emqx_ds_storage_layer_sup.erl index c2eee8dcb..fd8cf289f 100644 --- a/apps/emqx_durable_storage/src/emqx_ds_storage_layer_sup.erl +++ b/apps/emqx_durable_storage/src/emqx_ds_storage_layer_sup.erl @@ -30,7 +30,7 @@ start_link() -> start_shard(Shard, Options) -> supervisor:start_child(?SUP, shard_child_spec(Shard, Options)). --spec stop_shard(emqx_ds:shard()) -> ok | {error, _}. +-spec stop_shard(emqx_ds_storage_layer:shard_id()) -> ok | {error, _}. stop_shard(Shard) -> ok = supervisor:terminate_child(?SUP, Shard), ok = supervisor:delete_child(?SUP, Shard). diff --git a/apps/emqx_durable_storage/src/proto/emqx_ds_proto_v1.erl b/apps/emqx_durable_storage/src/proto/emqx_ds_proto_v1.erl index 3b7c36082..5104a417f 100644 --- a/apps/emqx_durable_storage/src/proto/emqx_ds_proto_v1.erl +++ b/apps/emqx_durable_storage/src/proto/emqx_ds_proto_v1.erl @@ -28,8 +28,7 @@ %% API funcions %%================================================================================ --spec drop_db([node()], emqx_ds:db()) -> - [{ok, ok} | erpc:caught_call_exception()]. +-spec drop_db([node()], emqx_ds:db()) -> [emqx_rpc:erpc(ok)]. drop_db(Node, DB) -> erpc:multicall(Node, emqx_ds_replication_layer, do_drop_db_v1, [DB]). @@ -65,7 +64,7 @@ make_iterator(Node, DB, Shard, Stream, TopicFilter, StartTime) -> emqx_ds_storage_layer:iterator(), pos_integer() ) -> - {ok, emqx_ds_storage_layer:iterator(), [emqx_types:messages()]} + {ok, emqx_ds_storage_layer:iterator(), [emqx_types:message()]} | {ok, end_of_stream} | {error, _}. next(Node, DB, Shard, Iter, BatchSize) -> diff --git a/apps/emqx_exhook/src/emqx_exhook_mgr.erl b/apps/emqx_exhook/src/emqx_exhook_mgr.erl index 6ff5350e2..f12fe6522 100644 --- a/apps/emqx_exhook/src/emqx_exhook_mgr.erl +++ b/apps/emqx_exhook/src/emqx_exhook_mgr.erl @@ -72,6 +72,10 @@ import_config/1 ]). +-export_type([ + server_name/0 +]). + %% Running servers -type state() :: #{servers := servers()}. diff --git a/apps/emqx_exhook/src/emqx_exhook_sup.erl b/apps/emqx_exhook/src/emqx_exhook_sup.erl index 9a2f07baa..00aa26e18 100644 --- a/apps/emqx_exhook/src/emqx_exhook_sup.erl +++ b/apps/emqx_exhook/src/emqx_exhook_sup.erl @@ -39,6 +39,10 @@ shutdown => Timeout }). +%% TODO: export_type: +%% grpc_client_sup:options/0 +-type grpc_client_sup_options() :: map(). + %%-------------------------------------------------------------------- %% Supervisor APIs & Callbacks %%-------------------------------------------------------------------- @@ -59,7 +63,7 @@ init([]) -> -spec start_grpc_client_channel( binary(), uri_string:uri_string(), - grpc_client_sup:options() + grpc_client_sup_options() ) -> {ok, pid()} | {error, term()}. start_grpc_client_channel(Name, SvrAddr, Options) -> grpc_client_sup:create_channel_pool(Name, SvrAddr, Options). diff --git a/apps/emqx_ft/src/emqx_ft.app.src b/apps/emqx_ft/src/emqx_ft.app.src index cb86c1450..e67a4cfa2 100644 --- a/apps/emqx_ft/src/emqx_ft.app.src +++ b/apps/emqx_ft/src/emqx_ft.app.src @@ -1,6 +1,6 @@ {application, emqx_ft, [ {description, "EMQX file transfer over MQTT"}, - {vsn, "0.1.9"}, + {vsn, "0.1.10"}, {registered, []}, {mod, {emqx_ft_app, []}}, {applications, [ diff --git a/apps/emqx_ft/src/emqx_ft_api.erl b/apps/emqx_ft/src/emqx_ft_api.erl index 180528f1f..f5c89ec8b 100644 --- a/apps/emqx_ft/src/emqx_ft_api.erl +++ b/apps/emqx_ft/src/emqx_ft_api.erl @@ -220,7 +220,7 @@ error_desc('SERVICE_UNAVAILABLE') -> roots() -> []. --spec fields(hocon_schema:name()) -> [hoconsc:field()]. +-spec fields(hocon_schema:name()) -> [hocon_schema:field()]. fields(client_id) -> [ {clientid, diff --git a/apps/emqx_ft/src/emqx_ft_storage_exporter.erl b/apps/emqx_ft/src/emqx_ft_storage_exporter.erl index 886dc27f6..edefda22b 100644 --- a/apps/emqx_ft/src/emqx_ft_storage_exporter.erl +++ b/apps/emqx_ft/src/emqx_ft_storage_exporter.erl @@ -36,7 +36,7 @@ %% Internal API -export([exporter/1]). --export_type([export/0]). +-export_type([export/0, exporter_conf/0]). -type storage() :: emqx_ft_storage_fs:storage() | undefined. -type transfer() :: emqx_ft:transfer(). diff --git a/apps/emqx_ft/src/emqx_ft_storage_fs.erl b/apps/emqx_ft/src/emqx_ft_storage_fs.erl index 0102756ca..454cc430c 100644 --- a/apps/emqx_ft/src/emqx_ft_storage_fs.erl +++ b/apps/emqx_ft/src/emqx_ft_storage_fs.erl @@ -56,6 +56,7 @@ -export_type([filefrag/1]). -export_type([filefrag/0]). -export_type([transferinfo/0]). +-export_type([segmentinfo/0]). -export_type([file_error/0]). @@ -104,7 +105,7 @@ type := 'local', enable := true, segments := segments(), - exporter := emqx_ft_storage_exporter:exporter() + exporter := emqx_ft_storage_exporter:exporter_conf() }. -type file_error() :: diff --git a/apps/emqx_ft/src/emqx_ft_storage_fs_reader.erl b/apps/emqx_ft/src/emqx_ft_storage_fs_reader.erl index 513872edd..e4aec2433 100644 --- a/apps/emqx_ft/src/emqx_ft_storage_fs_reader.erl +++ b/apps/emqx_ft/src/emqx_ft_storage_fs_reader.erl @@ -66,14 +66,14 @@ table(ReaderPid, Bytes) when is_pid(ReaderPid) andalso is_integer(Bytes) andalso end, qlc:table(fun() -> NextFun(ReaderPid) end, []). --spec start_link(pid(), filename:filename()) -> startlink_ret(). +-spec start_link(pid(), file:name()) -> startlink_ret(). start_link(CallerPid, Filename) when is_pid(CallerPid) andalso ?IS_FILENAME(Filename) -> gen_server:start_link(?MODULE, [CallerPid, Filename], []). --spec start_supervised(pid(), filename:filename()) -> startlink_ret(). +-spec start_supervised(pid(), file:name()) -> startlink_ret(). start_supervised(CallerPid, Filename) when is_pid(CallerPid) andalso ?IS_FILENAME(Filename) diff --git a/apps/emqx_gateway/src/bhvrs/emqx_gateway_channel.erl b/apps/emqx_gateway/src/bhvrs/emqx_gateway_channel.erl index 4d77138cf..2225f375f 100644 --- a/apps/emqx_gateway/src/bhvrs/emqx_gateway_channel.erl +++ b/apps/emqx_gateway/src/bhvrs/emqx_gateway_channel.erl @@ -20,7 +20,7 @@ %% module if it integrated with emqx_gateway_conn module -module(emqx_gateway_channel). --export_type([gen_server_from/0]). +-export_type([gen_server_from/0, channel/0]). -type channel() :: any(). @@ -39,7 +39,7 @@ %% Init %% @doc Initialize the channel state --callback init(emqx_types:conniinfo(), map()) -> channel(). +-callback init(emqx_types:conninfo(), map()) -> channel(). %%-------------------------------------------------------------------- %% Handles @@ -49,8 +49,8 @@ -type gen_server_from() :: {pid(), Tag :: term()}. -type reply() :: - {outgoing, emqx_gateway_frame:packet()} - | {outgoing, [emqx_gateway_frame:packet()]} + {outgoing, emqx_gateway_frame:frame()} + | {outgoing, [emqx_gateway_frame:frame()]} | {event, conn_state() | updated} | {close, Reason :: atom()}. diff --git a/apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl b/apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl index 9f3344e95..d61d086b4 100644 --- a/apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl +++ b/apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl @@ -73,7 +73,7 @@ %% Parse State parse_state :: emqx_gateway_frame:parse_state(), %% Serialize options - serialize :: emqx_gateway_frame:serialize_opts(), + serialize :: emqx_gateway_frame:serialize_options(), %% Channel State channel :: emqx_gateway_channel:channel(), %% GC State diff --git a/apps/emqx_gateway/src/bhvrs/emqx_gateway_frame.erl b/apps/emqx_gateway/src/bhvrs/emqx_gateway_frame.erl index 5efd2ee73..5f8038bcf 100644 --- a/apps/emqx_gateway/src/bhvrs/emqx_gateway_frame.erl +++ b/apps/emqx_gateway/src/bhvrs/emqx_gateway_frame.erl @@ -22,6 +22,13 @@ %% -module(emqx_gateway_frame). +-export_type([ + parse_state/0, + parse_result/0, + serialize_options/0, + frame/0 +]). + -type parse_state() :: map(). -type frame() :: any(). @@ -32,13 +39,6 @@ -type serialize_options() :: map(). --export_type([ - parse_state/0, - parse_result/0, - serialize_options/0, - frame/0 -]). - %% Callbacks %% @doc Initial the frame parser states diff --git a/apps/emqx_gateway/src/emqx_gateway_registry.erl b/apps/emqx_gateway/src/emqx_gateway_registry.erl index 20a3e1c42..314e974b4 100644 --- a/apps/emqx_gateway/src/emqx_gateway_registry.erl +++ b/apps/emqx_gateway/src/emqx_gateway_registry.erl @@ -42,6 +42,8 @@ code_change/3 ]). +-export_type([descriptor/0]). + -record(state, { reged = #{} :: #{gateway_name() => descriptor()} }). diff --git a/apps/emqx_utils/src/emqx_placeholder.erl b/apps/emqx_utils/src/emqx_placeholder.erl index 90df6003b..dbb2a4e1d 100644 --- a/apps/emqx_utils/src/emqx_placeholder.erl +++ b/apps/emqx_utils/src/emqx_placeholder.erl @@ -46,6 +46,8 @@ quote_mysql/1 ]). +-export_type([tmpl_token/0]). + -define(PH_VAR_THIS, '$this'). %% To match any pattern starts with '$' and followed by '{', and closed by a '}' char: