fix crashes when replicator db is deleted
BugzID: 83663
diff --git a/src/couch_replicator_manager.erl b/src/couch_replicator_manager.erl
index bdc3b8f..c9c0a68 100644
--- a/src/couch_replicator_manager.erl
+++ b/src/couch_replicator_manager.erl
@@ -731,11 +731,15 @@
end.
open_rep_doc(DbName, DocId) ->
- {ok, Db} = couch_db:open_int(DbName, [?CTX, sys_db]),
- try
- couch_db:open_doc(Db, DocId, [ejson_body])
- after
- couch_db:close(Db)
+ case couch_db:open_int(DbName, [?CTX, sys_db]) of
+ {ok, Db} ->
+ try
+ couch_db:open_doc(Db, DocId, [ejson_body])
+ after
+ couch_db:close(Db)
+ end;
+ Else ->
+ Else
end.
save_rep_doc(DbName, Doc) ->
@@ -791,6 +795,9 @@
ensure_rep_ddoc_exists(RepDb, DDocId) ->
case open_rep_doc(RepDb, DDocId) of
+ {not_found, no_db_file} ->
+ %% database was deleted.
+ ok;
{not_found, _Reason} ->
{ok, DDoc} = replication_design_doc(DDocId),
couch_log:notice("creating replicator ddoc", []),
@@ -941,9 +948,12 @@
true ->
ok;
false ->
- [gen_server:cast(Server, {resume_scan, ShardName})
- || ShardName <- replicator_shards(DbName)],
- ok
+ try
+ [gen_server:cast(Server, {resume_scan, ShardName})
+ || ShardName <- replicator_shards(DbName)]
+ catch error:database_does_not_exist ->
+ ok
+ end
end
end;
(_, _) -> ok