summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Vatamaniuc <vatamane@apache.org>2020-08-28 04:30:09 -0400
committerNick Vatamaniuc <vatamane@apache.org>2020-09-11 12:39:10 -0400
commiteac42e65c6b9f27b9ca34538d2c8672eda6f12a9 (patch)
treeb3c863bdbaabe5d851144e123f935c7e48d8acc5
parent56e0f9c936af75d4206346214cd836206f4b629a (diff)
downloadcouchdb-eac42e65c6b9f27b9ca34538d2c8672eda6f12a9.tar.gz
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.
-rw-r--r--rel/apps/couch_epi.config1
-rw-r--r--src/fabric/src/fabric2_db.erl15
-rw-r--r--src/fabric/src/fabric2_db_plugin.erl10
3 files changed, 23 insertions, 3 deletions
diff --git a/rel/apps/couch_epi.config b/rel/apps/couch_epi.config
index d3711636f..f9f49e1c3 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 b62f26ec8..00c3a1911 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 -> Resp; true ->
+ {ok, Db} = open(TgtDbName, Options),
+ fabric2_db_plugin:after_db_create(TgtDbName, get_uuid(Db)),
+ Resp
+ end;
Error ->
Error
end.
diff --git a/src/fabric/src/fabric2_db_plugin.erl b/src/fabric/src/fabric2_db_plugin.erl
index 1d923dd96..095b94cf4 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;