fix(ft): make configs user friendlier

This commit is contained in:
Ilya Averyanov 2023-04-07 01:58:25 +03:00
parent 7eeba32619
commit b2fd2dcbc1
6 changed files with 67 additions and 14 deletions

View File

@ -42,25 +42,40 @@
-type milliseconds() :: non_neg_integer(). -type milliseconds() :: non_neg_integer().
-type seconds() :: non_neg_integer(). -type seconds() :: non_neg_integer().
%% 5 minutes (s)
-define(DEFAULT_MIN_SEGMENTS_TTL, 300).
%% 1 day (s)
-define(DEFAULT_MAX_SEGMENTS_TTL, 86400).
%% 1 minute (ms)
-define(DEFAULT_GC_INTERVAL, 60000).
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
%% Accessors %% Accessors
%%-------------------------------------------------------------------- %%--------------------------------------------------------------------
-spec storage() -> _Storage | disabled. -spec storage() -> _Storage.
storage() -> storage() ->
emqx_config:get([file_transfer, storage], disabled). emqx_config:get([file_transfer, storage]).
-spec gc_interval(_Storage) -> milliseconds(). -spec gc_interval(_Storage) -> milliseconds().
gc_interval(_Storage) -> gc_interval(_Storage) ->
Conf = assert_storage(local), Conf = assert_storage(local),
emqx_map_lib:deep_get([segments, gc, interval], Conf). emqx_map_lib:deep_get([segments, gc, interval], Conf, ?DEFAULT_GC_INTERVAL).
-spec segments_ttl(_Storage) -> {_Min :: seconds(), _Max :: seconds()}. -spec segments_ttl(_Storage) -> {_Min :: seconds(), _Max :: seconds()}.
segments_ttl(_Storage) -> segments_ttl(_Storage) ->
Conf = assert_storage(local), Conf = assert_storage(local),
{ {
emqx_map_lib:deep_get([segments, gc, minimum_segments_ttl], Conf), emqx_map_lib:deep_get(
emqx_map_lib:deep_get([segments, gc, maximum_segments_ttl], Conf) [segments, gc, minimum_segments_ttl],
Conf,
?DEFAULT_MIN_SEGMENTS_TTL
),
emqx_map_lib:deep_get(
[segments, gc, maximum_segments_ttl],
Conf,
?DEFAULT_MAX_SEGMENTS_TTL
)
}. }.
assert_storage(Type) -> assert_storage(Type) ->
@ -79,7 +94,7 @@ assert_storage(Type) ->
load() -> load() ->
ok = emqx_ft_storage_exporter:update_exporter( ok = emqx_ft_storage_exporter:update_exporter(
undefined, undefined,
emqx_config:get([file_transfer, storage]) storage()
), ),
emqx_conf:add_handler([file_transfer], ?MODULE). emqx_conf:add_handler([file_transfer], ?MODULE).

View File

@ -52,8 +52,9 @@ fields(file_transfer) ->
ref(local_storage) ref(local_storage)
]), ]),
#{ #{
required => true, required => false,
desc => ?DESC("storage") desc => ?DESC("storage"),
default => default_storage()
} }
)} )}
]; ];
@ -184,7 +185,9 @@ desc(local_storage_exporter) ->
desc(s3_exporter) -> desc(s3_exporter) ->
"S3 Exporter settings for the File transfer local storage backend"; "S3 Exporter settings for the File transfer local storage backend";
desc(local_storage_segments_gc) -> desc(local_storage_segments_gc) ->
"Garbage collection settings for the File transfer local segments storage". "Garbage collection settings for the File transfer local segments storage";
desc(_) ->
undefined.
schema(filemeta) -> schema(filemeta) ->
#{ #{
@ -221,3 +224,11 @@ converter(checksum) ->
ref(Ref) -> ref(Ref) ->
ref(?MODULE, Ref). ref(?MODULE, Ref).
default_storage() ->
#{
<<"type">> => <<"local">>,
<<"exporter">> => #{
<<"type">> => <<"local">>
}
}.

View File

@ -101,4 +101,14 @@ S3 uploader won't try to upload parts larger than this size."""
zh: "" zh: ""
} }
} }
ipv6_probe {
desc {
en: "Whether to probe for IPv6 support."
zh: ""
}
label {
en: "IPv6 probe"
zh: ""
}
}
} }

View File

@ -37,6 +37,7 @@
max_retries => pos_integer(), max_retries => pos_integer(),
pool_size => pos_integer(), pool_size => pos_integer(),
pool_type => atom(), pool_type => atom(),
ipv6_probe => boolean(),
ssl => map() ssl => map()
}. }.

View File

@ -337,7 +337,7 @@ http_config(
SSLOpts = emqx_tls_lib:to_client_opts(maps:get(ssl, HTTPOpts)), SSLOpts = emqx_tls_lib:to_client_opts(maps:get(ssl, HTTPOpts)),
{tls, SSLOpts} {tls, SSLOpts}
end, end,
% NTransportOpts = emqx_misc:ipv6_probe(TransportOpts), NTransportOpts = maybe_ipv6_probe(TransportOpts, maps:get(ipv6_probe, HTTPOpts, true)),
[ [
{host, Host}, {host, Host},
{port, Port}, {port, Port},
@ -346,10 +346,15 @@ http_config(
{pool_type, PoolType}, {pool_type, PoolType},
{pool_size, PoolSize}, {pool_size, PoolSize},
{transport, Transport}, {transport, Transport},
{transport_opts, TransportOpts}, {transport_opts, NTransportOpts},
{enable_pipelining, EnablePipelining} {enable_pipelining, EnablePipelining}
]. ].
maybe_ipv6_probe(TransportOpts, true) ->
emqx_misc:ipv6_probe(TransportOpts);
maybe_ipv6_probe(TransportOpts, false) ->
TransportOpts.
http_pool_cleanup_interval(ProfileConfig) -> http_pool_cleanup_interval(ProfileConfig) ->
maps:get( maps:get(
http_pool_cleanup_interval, ProfileConfig, ?DEAFULT_HTTP_POOL_CLEANUP_INTERVAL http_pool_cleanup_interval, ProfileConfig, ?DEAFULT_HTTP_POOL_CLEANUP_INTERVAL

View File

@ -118,9 +118,20 @@ fields(s3) ->
)} )}
]; ];
fields(transport_options) -> fields(transport_options) ->
props_without( [
[base_url, max_retries, retry_interval, request], emqx_connector_http:fields(config) {ipv6_probe,
) ++ mk(
boolean(),
#{
default => true,
desc => ?DESC("ipv6_probe"),
required => false
}
)}
] ++
props_without(
[base_url, max_retries, retry_interval, request], emqx_connector_http:fields(config)
) ++
props_with( props_with(
[headers, max_retries, request_timeout], emqx_connector_http:fields("request") [headers, max_retries, request_timeout], emqx_connector_http:fields("request")
). ).