Merge pull request #12137 from zmstone/1207-fix-dialyzer
fix(dialyzer): batch 2
This commit is contained in:
commit
1212ccc519
|
@ -201,7 +201,8 @@ gen_salt(#{name := Other}) when Other =/= plain, Other =/= bcrypt ->
|
|||
<<X:128/big-unsigned-integer>> = 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) ->
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
->
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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, []},
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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)).
|
||||
|
||||
|
|
|
@ -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(),
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
socket := inet:socket(),
|
||||
frame_state :=
|
||||
undefined
|
||||
| emqx_bridge_sysk_frame:state(),
|
||||
| emqx_bridge_syskeeper_frame:state(),
|
||||
buffer := binary(),
|
||||
conf := map()
|
||||
}.
|
||||
|
|
|
@ -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).
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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}}).
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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, #{}),
|
||||
|
|
|
@ -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").
|
||||
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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}}),
|
||||
|
|
|
@ -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 = [
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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) ->
|
||||
|
|
|
@ -72,6 +72,10 @@
|
|||
import_config/1
|
||||
]).
|
||||
|
||||
-export_type([
|
||||
server_name/0
|
||||
]).
|
||||
|
||||
%% Running servers
|
||||
-type state() :: #{servers := servers()}.
|
||||
|
||||
|
|
|
@ -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).
|
||||
|
|
|
@ -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, [
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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().
|
||||
|
|
|
@ -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() ::
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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()}.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -42,6 +42,8 @@
|
|||
code_change/3
|
||||
]).
|
||||
|
||||
-export_type([descriptor/0]).
|
||||
|
||||
-record(state, {
|
||||
reged = #{} :: #{gateway_name() => descriptor()}
|
||||
}).
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue