You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2020/08/13 13:25:58 UTC
[couchdb] branch couch_index_server_crash2 created (now 7b6f806)
This is an automated email from the ASF dual-hosted git repository.
rnewson pushed a change to branch couch_index_server_crash2
in repository https://gitbox.apache.org/repos/asf/couchdb.git.
at 7b6f806 Don't crash couch_index_server if the db isn't known yet
This branch includes the following new commits:
new 7b6f806 Don't crash couch_index_server if the db isn't known yet
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[couchdb] 01/01: Don't crash couch_index_server if the db isn't
known yet
Posted by rn...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
rnewson pushed a commit to branch couch_index_server_crash2
in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 7b6f806ad63eeb06d73c296232ff9f966247ae31
Author: Robert Newson <ro...@uk.ibm.com>
AuthorDate: Thu Aug 13 14:23:24 2020 +0100
Don't crash couch_index_server if the db isn't known yet
If a ddoc is added immediately after database creation (_users and
_replicator when couchdb is used in a multi-tenant fashion), we can
crash couch_index_server in handle_db_event, as mem3_shards:local
throws an error.
---
src/couch_index/src/couch_index_server.erl | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/couch_index/src/couch_index_server.erl b/src/couch_index/src/couch_index_server.erl
index 67f0f8c..6bebff2 100644
--- a/src/couch_index/src/couch_index_server.erl
+++ b/src/couch_index/src/couch_index_server.erl
@@ -284,7 +284,11 @@ handle_db_event(<<"shards/", _/binary>> = DbName, {ddoc_updated,
DDocResult = couch_util:with_db(DbName, fun(Db) ->
couch_db:open_doc(Db, DDocId, [ejson_body, ?ADMIN_CTX])
end),
- DbShards = [mem3:name(Sh) || Sh <- mem3:local_shards(mem3:dbname(DbName))],
+ LocalShards = try mem3:local_shards(mem3:dbname(DbName))
+ catch error:database_does_not_exist ->
+ []
+ end,
+ DbShards = [mem3:name(Sh) || Sh <- LocalShards],
lists:foreach(fun(DbShard) ->
lists:foreach(fun({_DbShard, {_DDocId, Sig}}) ->
% check if there are other ddocs with the same Sig for the same db