diff --git a/apps/emqx_authn/test/emqx_authn_mongo_SUITE.erl b/apps/emqx_authn/test/emqx_authn_mongo_SUITE.erl index 5b28a9853..cb97e3d48 100644 --- a/apps/emqx_authn/test/emqx_authn_mongo_SUITE.erl +++ b/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">>, diff --git a/apps/emqx_authn/test/emqx_authn_mongo_tls_SUITE.erl b/apps/emqx_authn/test/emqx_authn_mongo_tls_SUITE.erl index bf3d91984..fb83c5b77 100644 --- a/apps/emqx_authn/test/emqx_authn_mongo_tls_SUITE.erl +++ b/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">>, diff --git a/apps/emqx_authz/test/emqx_authz_SUITE.erl b/apps/emqx_authz/test/emqx_authz_SUITE.erl index 17c9ca519..5a9f6d97e 100644 --- a/apps/emqx_authz/test/emqx_authz_SUITE.erl +++ b/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}, diff --git a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl index 614ecda19..03df47eac 100644 --- a/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl +++ b/apps/emqx_authz/test/emqx_authz_api_sources_SUITE.erl @@ -39,6 +39,7 @@ <<"enable">> => true, <<"mongo_type">> => <<"single">>, <<"server">> => <>, + <<"w_mode">> => <<"unsafe">>, <<"pool_size">> => 1, <<"database">> => <<"mqtt">>, <<"ssl">> => #{<<"enable">> => false}, diff --git a/apps/emqx_connector/src/emqx_connector_mongo.erl b/apps/emqx_connector/src/emqx_connector_mongo.erl index a3e860740..58ea888a9 100644 --- a/apps/emqx_connector/src/emqx_connector_mongo.erl +++ b/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.