You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2019/07/31 09:09:52 UTC

[couchdb] 02/04: Expose the is_replicator_db and is_user_db logic

This is an automated email from the ASF dual-hosted git repository.

garren pushed a commit to branch prototype/fdb-layer
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit 6b90c685f8dfa47c8a2d35b5a8c9f0b423708c97
Author: Paul J. Davis <pa...@gmail.com>
AuthorDate: Tue Jul 16 14:26:11 2019 -0500

    Expose the is_replicator_db and is_user_db logic
    
    This exposes a single place where we can check for whether a given
    database or database name is a replicator or users database.
---
 src/fabric/src/fabric2_db.erl   | 37 +++++++++++++++++++++++++++----------
 src/fabric/src/fabric2_util.erl |  6 ++++--
 2 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/src/fabric/src/fabric2_db.erl b/src/fabric/src/fabric2_db.erl
index 3c3b7d3..c926da9 100644
--- a/src/fabric/src/fabric2_db.erl
+++ b/src/fabric/src/fabric2_db.erl
@@ -55,6 +55,8 @@
     is_partitioned/1,
     is_system_db/1,
     is_system_db_name/1,
+    is_replicator_db/1,
+    is_users_db/1,
 
     set_revs_limit/2,
     %% set_purge_infos_limit/2,
@@ -379,6 +381,29 @@ is_system_db_name(DbName) when is_binary(DbName) ->
     end.
 
 
+is_replicator_db(#{name := DbName}) ->
+    is_replicator_db(DbName);
+
+is_replicator_db(DbName) when is_binary(DbName) ->
+    fabric2_util:dbname_ends_with(DbName, <<"_replicator">>).
+
+
+is_users_db(#{name := DbName}) ->
+    is_users_db(DbName);
+
+is_users_db(DbName) when is_binary(DbName) ->
+    AuthenticationDb = config:get("chttpd_auth", "authentication_db"),
+    CfgUsersSuffix = config:get("couchdb", "users_db_suffix", "_users"),
+
+    IsAuthCache = if AuthenticationDb == undefined -> false; true ->
+        DbName == ?l2b(AuthenticationDb)
+    end,
+    IsCfgUsersDb = fabric2_util:dbname_ends_with(DbName, ?l2b(CfgUsersSuffix)),
+    IsGlobalUsersDb = fabric2_util:dbname_ends_with(DbName, <<"_users">>),
+
+    IsAuthCache orelse IsCfgUsersDb orelse IsGlobalUsersDb.
+
+
 set_revs_limit(#{} = Db, RevsLimit) ->
     check_is_admin(Db),
     RevsLimBin = ?uint2bin(RevsLimit),
@@ -734,16 +759,8 @@ fold_changes(Db, SinceSeq, UserFun, UserAcc, Options) ->
 
 
 maybe_add_sys_db_callbacks(Db) ->
-    IsReplicatorDb = fabric2_util:dbname_ends_with(Db, <<"_replicator">>),
-
-    AuthenticationDb = config:get("chttpd_auth", "authentication_db"),
-    IsAuthCache = if AuthenticationDb == undefined -> false; true ->
-        name(Db) == ?l2b(AuthenticationDb)
-    end,
-    CfgUsersSuffix = config:get("couchdb", "users_db_suffix", "_users"),
-    IsCfgUsersDb = fabric2_util:dbname_ends_with(Db, ?l2b(CfgUsersSuffix)),
-    IsGlobalUsersDb = fabric2_util:dbname_ends_with(Db, <<"_users">>),
-    IsUsersDb = IsAuthCache orelse IsCfgUsersDb orelse IsGlobalUsersDb,
+    IsReplicatorDb = is_replicator_db(Db),
+    IsUsersDb = is_users_db(Db),
 
     {BDU, ADR} = if
         IsReplicatorDb ->
diff --git a/src/fabric/src/fabric2_util.erl b/src/fabric/src/fabric2_util.erl
index 48bf7d1..2b8e49e 100644
--- a/src/fabric/src/fabric2_util.erl
+++ b/src/fabric/src/fabric2_util.erl
@@ -124,8 +124,10 @@ validate_json_list_of_strings(Member, Props) ->
     end.
 
 
-dbname_ends_with(#{} = Db, Suffix) when is_binary(Suffix) ->
-    DbName = fabric2_db:name(Db),
+dbname_ends_with(#{} = Db, Suffix) ->
+    dbname_ends_with(fabric2_db:name(Db), Suffix);
+
+dbname_ends_with(DbName, Suffix) when is_binary(DbName), is_binary(Suffix) ->
     Suffix == filename:basename(DbName).