fix(ft): make configs user friendlier
This commit is contained in:
parent
7eeba32619
commit
b2fd2dcbc1
|
@ -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).
|
||||||
|
|
||||||
|
|
|
@ -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">>
|
||||||
|
}
|
||||||
|
}.
|
||||||
|
|
|
@ -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: ""
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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()
|
||||||
}.
|
}.
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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")
|
||||||
).
|
).
|
||||||
|
|
Loading…
Reference in New Issue