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

fix(mongo): add r_mode and w_mode options
This commit is contained in:
tigercl 2022-01-07 14:29:11 +08:00 committed by GitHub
commit 08120b9a99
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 2 deletions

View File

@ -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">>,

View File

@ -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">>,

View File

@ -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},

View File

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

View File

@ -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.