You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by fd...@apache.org on 2012/01/17 21:40:30 UTC
git commit: Fix ets lookup case_clause error after ddoc is updated
Updated Branches:
refs/heads/1.2.x 3b63f8daf -> c65cca613
Fix ets lookup case_clause error after ddoc is updated
This happens if the ddoc_updated event is received after
a client opens the new view group or if a design document
is updated several times in a row and there are still
clients streaming views from 2 or more view groups that
match old versions of the design document.
This relates to COUCHDB-1309
Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/c65cca61
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/c65cca61
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/c65cca61
Branch: refs/heads/1.2.x
Commit: c65cca613a5d39e453fd04dc6669d859849ce822
Parents: 3b63f8d
Author: Filipe David Borba Manana <fd...@apache.org>
Authored: Tue Jan 17 15:22:52 2012 +0000
Committer: Filipe David Borba Manana <fd...@apache.org>
Committed: Tue Jan 17 20:38:54 2012 +0000
----------------------------------------------------------------------
src/couchdb/couch_view.erl | 21 ++++++++++-----------
1 files changed, 10 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb/blob/c65cca61/src/couchdb/couch_view.erl
----------------------------------------------------------------------
diff --git a/src/couchdb/couch_view.erl b/src/couchdb/couch_view.erl
index 2c28d05..29026ed 100644
--- a/src/couchdb/couch_view.erl
+++ b/src/couchdb/couch_view.erl
@@ -288,17 +288,16 @@ init([]) ->
({created, DbName}) ->
gen_server:cast(couch_view, {reset_indexes, DbName});
({ddoc_updated, {DbName, DDocId}}) ->
- case ets:match_object(couch_groups_by_db, {DbName, {DDocId, '$1'}}) of
- [] ->
- ok;
- [{DbName, {DDocId, Sig}}] ->
- case ets:lookup(group_servers_by_sig, {DbName, Sig}) of
- [{_, GroupPid}] ->
- (catch gen_server:cast(GroupPid, ddoc_updated));
- [] ->
- ok
- end
- end;
+ lists:foreach(
+ fun({_DbName, {_DDocId, Sig}}) ->
+ case ets:lookup(group_servers_by_sig, {DbName, Sig}) of
+ [{_, GroupPid}] ->
+ (catch gen_server:cast(GroupPid, ddoc_updated));
+ [] ->
+ ok
+ end
+ end,
+ ets:match_object(couch_groups_by_db, {DbName, {DDocId, '$1'}}));
(_Else) ->
ok
end),