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;