summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Lehnardt <jan@apache.org>2012-03-13 18:49:36 +0100
committerJan Lehnardt <jan@apache.org>2012-03-13 18:49:36 +0100
commit4098fee352dae62e51bd4b3217cbd5bd074aa8da (patch)
tree8bf07ff64fd088c558669baf389e7122e1960b0a
parent623e4950e840b9083666c43053cb6e11a71078c5 (diff)
downloadcouchdb-4098fee352dae62e51bd4b3217cbd5bd074aa8da.tar.gz
Fix view etag calculation regression introduced by fb7225
The optimisation relied on creating batches of documents to be sent to the view server. The implementation created the batch in a foldl function instead of a foldr function causing the wrong update sequence to be persisted because the write assumes the last item in the list to have the largest sequence. Thanks to Filipe for guiding the research.
-rw-r--r--share/www/script/test/etags_views.js4
-rw-r--r--src/couchdb/couch_view_updater.erl2
2 files changed, 3 insertions, 3 deletions
diff --git a/share/www/script/test/etags_views.js b/share/www/script/test/etags_views.js
index 6d8e97b88..0d374f941 100644
--- a/share/www/script/test/etags_views.js
+++ b/share/www/script/test/etags_views.js
@@ -112,7 +112,7 @@ couchTests.etags_views = function(debug) {
restartServer();
xhr = CouchDB.request("GET", "/test_suite_db/_design/etags/_view/basicView");
var etag2 = xhr.getResponseHeader("etag");
- T(etag1 == etag2);
+ TEquals(etag2, etag1, "etag should be the same after restart 1");
// reduce view
xhr = CouchDB.request("GET", "/test_suite_db/_design/etags/_view/withReduce");
@@ -155,7 +155,7 @@ couchTests.etags_views = function(debug) {
restartServer();
xhr = CouchDB.request("GET", "/test_suite_db/_design/etags/_view/withReduce");
var etag2 = xhr.getResponseHeader("etag");
- T(etag1 == etag2);
+ TEquals(etag2, etag1, "etag should be the same after restart 2");
// confirm ETag changes with different POST bodies
xhr = CouchDB.request("POST", "/test_suite_db/_design/etags/_view/basicView",
diff --git a/src/couchdb/couch_view_updater.erl b/src/couchdb/couch_view_updater.erl
index 73a61fca8..4aee5865c 100644
--- a/src/couchdb/couch_view_updater.erl
+++ b/src/couchdb/couch_view_updater.erl
@@ -166,7 +166,7 @@ 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} ->
- Items = lists:foldl(
+ Items = lists:foldr(
fun({Seq, #doc{id = Id, deleted = true}}, Acc) ->
Item = {Seq, Id, []},
[Item | Acc];