Revision 623631626365 () - Diff

Link to this snippet: https://friendpaste.com/178nPFgfyyeGf2vtNRpL0w
Embed:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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]};