Просмотр исходного кода

Merge pull request #6663 from tigercl/fix/mongo-rw-mode

fix(mongo): add r_mode and w_mode options
tigercl 4 лет назад
Родитель
Сommit
08120b9a99

+ 3 - 1
apps/emqx_authn/test/emqx_authn_mongo_SUITE.erl

@@ -82,7 +82,8 @@ t_create_invalid(_Config) ->
     InvalidConfigs =
         [
          AuthConfig#{mongo_type => <<"unknown">>},
-         AuthConfig#{selector => <<"{ \"username\": \"${username}\" }">>}
+         AuthConfig#{selector => <<"{ \"username\": \"${username}\" }">>},
+         AuthConfig#{w_mode => <<"unknown">>}
         ],
 
     lists:foreach(
@@ -247,6 +248,7 @@ raw_mongo_auth_config() ->
       database => <<"mqtt">>,
       collection => <<"users">>,
       server => mongo_server(),
+      w_mode => <<"unsafe">>,
 
       selector => #{<<"username">> => <<"${username}">>},
       password_hash_field => <<"password_hash">>,

+ 1 - 0
apps/emqx_authn/test/emqx_authn_mongo_tls_SUITE.erl

@@ -160,6 +160,7 @@ raw_mongo_auth_config(SpecificSSLOpts) ->
       database => <<"mqtt">>,
       collection => <<"users">>,
       server => mongo_server(),
+      w_mode => <<"unsafe">>,
 
       selector => #{<<"username">> => <<"${username}">>},
       password_hash_field => <<"password_hash">>,

+ 1 - 0
apps/emqx_authz/test/emqx_authz_SUITE.erl

@@ -73,6 +73,7 @@ set_special_configs(_App) ->
                    <<"enable">> => true,
                    <<"mongo_type">> => <<"single">>,
                    <<"server">> => <<"127.0.0.1:27017">>,
+                   <<"w_mode">> => <<"unsafe">>,
                    <<"pool_size">> => 1,
                    <<"database">> => <<"mqtt">>,
                    <<"ssl">> => #{<<"enable">> => false},

+ 1 - 0
apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl

@@ -39,6 +39,7 @@
                    <<"enable">> => true,
                    <<"mongo_type">> => <<"single">>,
                    <<"server">> => <<?MONGO_SINGLE_HOST>>,
+                   <<"w_mode">> => <<"unsafe">>,
                    <<"pool_size">> => 1,
                    <<"database">> => <<"mqtt">>,
                    <<"ssl">> => #{<<"enable">> => false},

+ 12 - 1
apps/emqx_connector/src/emqx_connector_mongo.erl

@@ -34,7 +34,6 @@
         , on_jsonify/1
         ]).
 
-
 %% ecpool callback
 -export([connect/1]).
 
@@ -55,17 +54,21 @@ fields(single) ->
     [ {mongo_type, #{type => single,
                      default => single}}
     , {server, fun server/1}
+    , {w_mode, fun w_mode/1}
     ] ++ mongo_fields();
 fields(rs) ->
     [ {mongo_type, #{type => rs,
                      default => rs}}
     , {servers, fun servers/1}
+    , {w_mode, fun w_mode/1}
+    , {r_mode, fun r_mode/1}
     , {replica_set_name, fun replica_set_name/1}
     ] ++ mongo_fields();
 fields(sharded) ->
     [ {mongo_type, #{type => sharded,
                      default => sharded}}
     , {servers, fun servers/1}
+    , {w_mode, fun w_mode/1}
     ] ++ mongo_fields();
 fields(topology) ->
     [ {pool_size, fun emqx_connector_schema_lib:pool_size/1}
@@ -271,6 +274,14 @@ servers(type) -> binary();
 servers(validator) -> [?NOT_EMPTY("the value of the field 'servers' cannot be empty")];
 servers(_) -> undefined.
 
+w_mode(type) -> hoconsc:enum([unsafe, safe]);
+w_mode(default) -> unsafe;
+w_mode(_) -> undefined.
+
+r_mode(type) -> hoconsc:enum([master, slave_ok]);
+r_mode(default) -> master;
+r_mode(_) -> undefined.
+
 duration(type) -> emqx_schema:duration_ms();
 duration(nullable) -> true;
 duration(_) -> undefined.