diff options
author | Nick Vatamaniuc <vatamane@apache.org> | 2020-08-28 04:30:09 -0400 |
---|---|---|
committer | Nick Vatamaniuc <vatamane@apache.org> | 2020-09-11 12:39:10 -0400 |
commit | eac42e65c6b9f27b9ca34538d2c8672eda6f12a9 (patch) | |
tree | b3c863bdbaabe5d851144e123f935c7e48d8acc5 | |
parent | 56e0f9c936af75d4206346214cd836206f4b629a (diff) | |
download | couchdb-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.config | 1 | ||||
-rw-r--r-- | src/fabric/src/fabric2_db.erl | 15 | ||||
-rw-r--r-- | 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 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; |