diff options
author | Jan Lehnardt <jan@apache.org> | 2012-03-13 18:49:36 +0100 |
---|---|---|
committer | Jan Lehnardt <jan@apache.org> | 2012-03-13 18:49:36 +0100 |
commit | 4098fee352dae62e51bd4b3217cbd5bd074aa8da (patch) | |
tree | 8bf07ff64fd088c558669baf389e7122e1960b0a | |
parent | 623e4950e840b9083666c43053cb6e11a71078c5 (diff) | |
download | couchdb-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.js | 4 | ||||
-rw-r--r-- | src/couchdb/couch_view_updater.erl | 2 |
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]; |