Procházet zdrojové kódy

fix(s3-bridge): restore backward config compatibility

Andrew Mayorov před 1 rokem
rodič
revize
8016e9adf4

+ 23 - 10
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 ->

+ 49 - 0
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}
+      }
+    }
+  }
+}