--- Revision None +++ Revision 623631626365 @@ -0,0 +1,38 @@ +diff --git a/src/couchdb/couch_view_updater.erl b/src/couchdb/couch_view_updater.erl +index 51f06b4..73a61fc 100644 +--- a/src/couchdb/couch_view_updater.erl ++++ b/src/couchdb/couch_view_updater.erl +@@ -166,16 +166,17 @@ do_maps(#group{query_server = Qs} = Group, MapQueue, WriteQueue) -> + couch_work_queue:close(WriteQueue), + couch_query_servers:stop_doc_map(Group#group.query_server); + {ok, Queue} -> +- lists:foreach( +- fun({Seq, #doc{id = Id, deleted = true}}) -> ++ Items = lists:foldl( ++ fun({Seq, #doc{id = Id, deleted = true}}, Acc) -> + Item = {Seq, Id, []}, +- ok = couch_work_queue:queue(WriteQueue, Item); +- ({Seq, #doc{id = Id, deleted = false} = Doc}) -> ++ [Item | Acc]; ++ ({Seq, #doc{id = Id, deleted = false} = Doc}, Acc) -> + {ok, Result} = couch_query_servers:map_doc_raw(Qs, Doc), + Item = {Seq, Id, Result}, +- ok = couch_work_queue:queue(WriteQueue, Item) ++ [Item | Acc] + end, +- Queue), ++ [], Queue), ++ ok = couch_work_queue:queue(WriteQueue, Items), + do_maps(Group, MapQueue, WriteQueue) + end. + +@@ -183,7 +184,8 @@ do_writes(Parent, Owner, Group, WriteQueue, InitialBuild, ViewEmptyKVs) -> + case couch_work_queue:dequeue(WriteQueue) of + closed -> + Parent ! {new_group, Group}; +- {ok, Queue} -> ++ {ok, Queue0} -> ++ Queue = lists:flatten(Queue0), + {ViewKVs, DocIdViewIdKeys} = lists:foldr( + fun({_Seq, Id, []}, {ViewKVsAcc, DocIdViewIdKeysAcc}) -> + {ViewKVsAcc, [{Id, []} | DocIdViewIdKeysAcc]};