diff --git a/apps/emqx_bridge_s3/src/emqx_bridge_s3_upload.erl b/apps/emqx_bridge_s3/src/emqx_bridge_s3_upload.erl index 00fd6fdc0..8b7c3216e 100644 --- a/apps/emqx_bridge_s3/src/emqx_bridge_s3_upload.erl +++ b/apps/emqx_bridge_s3/src/emqx_bridge_s3_upload.erl @@ -63,10 +63,14 @@ fields(action) -> fields(?ACTION) -> emqx_bridge_v2_schema:make_producer_action_schema( hoconsc:mk( - mkunion(mode, #{ - <<"direct">> => ?R_REF(s3_direct_upload_parameters), - <<"aggregated">> => ?R_REF(s3_aggregated_upload_parameters) - }), + mkunion( + mode, + #{ + <<"direct">> => ?R_REF(s3_direct_upload_parameters), + <<"aggregated">> => ?R_REF(s3_aggregated_upload_parameters) + }, + <<"direct">> + ), #{ required => true, desc => ?DESC(s3_upload), @@ -87,7 +91,7 @@ fields(s3_direct_upload_parameters) -> hoconsc:mk( direct, #{ - required => true, + default => <<"direct">>, desc => ?DESC(s3_direct_upload_mode) } )}, @@ -187,13 +191,22 @@ fields(s3_upload_resource_opts) -> ]). mkunion(Field, Schemas) -> - hoconsc:union(fun(Arg) -> scunion(Field, Schemas, Arg) end). + mkunion(Field, Schemas, none). -scunion(_Field, Schemas, all_union_members) -> +mkunion(Field, Schemas, Default) -> + hoconsc:union(fun(Arg) -> scunion(Field, Schemas, Default, Arg) end). + +scunion(_Field, Schemas, _Default, all_union_members) -> maps:values(Schemas); -scunion(Field, Schemas, {value, Value}) -> - Selector = maps:get(emqx_utils_conv:bin(Field), Value, undefined), - case Selector == undefined orelse maps:find(emqx_utils_conv:bin(Selector), Schemas) of +scunion(Field, Schemas, Default, {value, Value}) -> + Selector = + case maps:get(emqx_utils_conv:bin(Field), Value, undefined) of + undefined -> + Default; + X -> + emqx_utils_conv:bin(X) + end, + case maps:find(Selector, Schemas) of {ok, Schema} -> [Schema]; _Error -> diff --git a/scripts/conf-test/old-confs/e5.6.1.conf b/scripts/conf-test/old-confs/e5.6.1.conf new file mode 100644 index 000000000..999230a32 --- /dev/null +++ b/scripts/conf-test/old-confs/e5.6.1.conf @@ -0,0 +1,49 @@ +node { + name = "emqx@127.0.0.1" + cookie = "emqxsecretcookie" + data_dir = "data" +} + +actions { + s3 { + s3direct { + connector = s3local + enable = true + parameters { + acl = private + bucket = direct + content = "${.}" + headers {} + key = "${clientid}/${id}" + } + resource_opts { + health_check_interval = 15s + inflight_window = 100 + max_buffer_bytes = 256MB + query_mode = async + request_ttl = 45s + worker_pool_size = 16 + } + } + } +} +connectors { + s3 { + s3local { + access_key_id = ACCESS + host = localhost + port = 9000 + resource_opts {health_check_interval = 15s, start_timeout = 5s} + secret_access_key = SECRET + transport_options { + connect_timeout = 15s + enable_pipelining = 100 + headers {} + ipv6_probe = false + pool_size = 8 + pool_type = random + ssl {enable = false, verify = verify_peer} + } + } + } +}