You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2020/09/15 20:13:58 UTC

[couchdb] 01/16: Add after_db_create/2 and after_db_delete/2 callbacks to fabric

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

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

commit 36a6b390f4f5e236401224ed30dea7282be965a5
Author: Nick Vatamaniuc <va...@apache.org>
AuthorDate: Fri Aug 28 04:30:09 2020 -0400

    Add after_db_create/2 and after_db_delete/2 callbacks to fabric
    
    `after_db_create/2` and `after_db_delete/2` are when databases are created and
    deleted respectively. The callbacks are called with both the database name and
    the database instance UUID values.
---
 rel/apps/couch_epi.config            |  1 +
 src/fabric/src/fabric2_db.erl        | 15 ++++++++++++---
 src/fabric/src/fabric2_db_plugin.erl | 10 ++++++++++
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/rel/apps/couch_epi.config b/rel/apps/couch_epi.config
index d371163..f9f49e1 100644
--- a/rel/apps/couch_epi.config
+++ b/rel/apps/couch_epi.config
@@ -16,6 +16,7 @@
     chttpd_epi,
     couch_index_epi,
     couch_views_epi,
+    couch_replicator_epi,
     dreyfus_epi,
     global_changes_epi,
     mango_epi,
diff --git a/src/fabric/src/fabric2_db.erl b/src/fabric/src/fabric2_db.erl
index b62f26e..b3e510b 100644
--- a/src/fabric/src/fabric2_db.erl
+++ b/src/fabric/src/fabric2_db.erl
@@ -187,6 +187,7 @@ create(DbName, Options) ->
                 #{} = Db0 ->
                     Db1 = maybe_add_sys_db_callbacks(Db0),
                     ok = fabric2_server:store(Db1),
+                    fabric2_db_plugin:after_db_create(DbName, get_uuid(Db1)),
                     {ok, Db1#{tx := undefined}};
                 Error ->
                     Error
@@ -235,6 +236,7 @@ delete(DbName, Options) ->
                 fabric2_fdb:delete(TxDb)
             end),
             if Resp /= ok -> Resp; true ->
+                fabric2_db_plugin:after_db_delete(DbName, get_uuid(Db)),
                 fabric2_server:remove(DbName)
             end
     end.
@@ -243,9 +245,16 @@ delete(DbName, Options) ->
 undelete(DbName, TgtDbName, TimeStamp, Options) ->
     case validate_dbname(TgtDbName) of
         ok ->
-            fabric2_fdb:transactional(DbName, Options, fun(TxDb) ->
-                fabric2_fdb:undelete(TxDb, TgtDbName, TimeStamp)
-            end);
+            Resp = fabric2_fdb:transactional(DbName, Options,
+                fun(TxDb) ->
+                    fabric2_fdb:undelete(TxDb, TgtDbName, TimeStamp)
+                end
+            ),
+            if Resp /= ok -> ok; true ->
+                {ok, Db} = open(TgtDbName, Options),
+                fabric2_db_plugin:after_db_create(TgtDbName, get_uuid(Db))
+            end,
+            Resp;
         Error ->
             Error
     end.
diff --git a/src/fabric/src/fabric2_db_plugin.erl b/src/fabric/src/fabric2_db_plugin.erl
index 1d923dd..095b94c 100644
--- a/src/fabric/src/fabric2_db_plugin.erl
+++ b/src/fabric/src/fabric2_db_plugin.erl
@@ -14,6 +14,8 @@
 
 -export([
     validate_dbname/3,
+    after_db_create/2,
+    after_db_delete/2,
     before_doc_update/3,
     after_doc_write/6,
     after_doc_read/2,
@@ -37,6 +39,14 @@ validate_dbname(DbName, Normalized, Default) ->
     maybe_handle(validate_dbname, [DbName, Normalized], Default).
 
 
+after_db_create(DbName, DbUUID) when is_binary(DbName), is_binary(DbUUID) ->
+    with_pipe(after_db_create, [DbName, DbUUID]).
+
+
+after_db_delete(DbName, DbUUID) when is_binary(DbName), is_binary(DbUUID) ->
+    with_pipe(after_db_delete, [DbName, DbUUID]).
+
+
 before_doc_update(_, #doc{id = <<?LOCAL_DOC_PREFIX, _/binary>>} = Doc, _) ->
     Doc;