summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/www/script/test/view_update_seq.js14
-rw-r--r--src/couchdb/couch_httpd_view.erl5
-rw-r--r--src/couchdb/couch_view.erl16
3 files changed, 28 insertions, 7 deletions
diff --git a/share/www/script/test/view_update_seq.js b/share/www/script/test/view_update_seq.js
index cfda1a87..d46cb3c6 100644
--- a/share/www/script/test/view_update_seq.js
+++ b/share/www/script/test/view_update_seq.js
@@ -68,17 +68,23 @@ couchTests.view_update_seq = function(debug) {
T(resp.rows.length == 1);
T(resp.update_seq == 101);
+ db.save({"id":"00"});
+ resp = db.view('test/all_docs',
+ {limit: 1, stale: "update_after", update_seq: true});
+ T(resp.rows.length == 1);
+ T(resp.update_seq == 101);
+
resp = db.view('test/all_docs', {limit: 1, update_seq:true});
T(resp.rows.length == 1);
- T(resp.update_seq == 102);
+ T(resp.update_seq == 103);
resp = db.view('test/all_docs',{update_seq:true},["0","1"]);
- T(resp.update_seq == 102);
+ T(resp.update_seq == 103);
resp = db.view('test/all_docs',{update_seq:true},["0","1"]);
- T(resp.update_seq == 102);
+ T(resp.update_seq == 103);
resp = db.view('test/summate',{group:true, update_seq:true},["0","1"]);
- T(resp.update_seq == 102);
+ T(resp.update_seq == 103);
};
diff --git a/src/couchdb/couch_httpd_view.erl b/src/couchdb/couch_httpd_view.erl
index 3c93e50a..62d0ee5b 100644
--- a/src/couchdb/couch_httpd_view.erl
+++ b/src/couchdb/couch_httpd_view.erl
@@ -282,8 +282,11 @@ parse_view_param("count", _Value) ->
throw({query_parse_error, <<"Query parameter 'count' is now 'limit'.">>});
parse_view_param("stale", "ok") ->
[{stale, ok}];
+parse_view_param("stale", "update_after") ->
+ [{stale, update_after}];
parse_view_param("stale", _Value) ->
- throw({query_parse_error, <<"stale only available as stale=ok">>});
+ throw({query_parse_error,
+ <<"stale only available as stale=ok or as stale=update_after">>});
parse_view_param("update", _Value) ->
throw({query_parse_error, <<"update=false is now stale=ok">>});
parse_view_param("descending", Value) ->
diff --git a/src/couchdb/couch_view.erl b/src/couchdb/couch_view.erl
index 38c0a783..189bd98f 100644
--- a/src/couchdb/couch_view.erl
+++ b/src/couchdb/couch_view.erl
@@ -58,11 +58,23 @@ get_group_server(DbName, GroupId) ->
get_group(Db, GroupId, Stale) ->
MinUpdateSeq = case Stale of
ok -> 0;
+ update_after -> 0;
_Else -> couch_db:get_update_seq(Db)
end,
- couch_view_group:request_group(
+ Result = {ok, Group} = couch_view_group:request_group(
get_group_server(couch_db:name(Db), GroupId),
- MinUpdateSeq).
+ MinUpdateSeq),
+ case Stale of
+ update_after ->
+ % best effort, process might die
+ spawn(fun() ->
+ LastSeq = couch_db:get_update_seq(Db),
+ couch_view_group:request_group(Group, LastSeq)
+ end);
+ _ ->
+ ok
+ end,
+ Result.
get_temp_group(Db, Language, DesignOptions, MapSrc, RedSrc) ->
couch_view_group:request_group(