Merge remote-tracking branch 'banjiewen/stale-stable-update'
diff --git a/include/couch_mrview.hrl b/include/couch_mrview.hrl
index bfd20ad..a341e30 100644
--- a/include/couch_mrview.hrl
+++ b/include/couch_mrview.hrl
@@ -77,7 +77,8 @@
skip = 0,
group_level = 0,
group = undefined,
- stale = false,
+ stable = false,
+ update = true,
multi_get = false,
inclusive_end = true,
include_docs = false,
diff --git a/src/couch_mrview_http.erl b/src/couch_mrview_http.erl
index b554e36..7e3fd78 100644
--- a/src/couch_mrview_http.erl
+++ b/src/couch_mrview_http.erl
@@ -518,11 +518,25 @@
"limit" ->
Args#mrargs{limit=parse_pos_int(Val)};
"stale" when Val == "ok" orelse Val == <<"ok">> ->
- Args#mrargs{stale=ok};
+ Args#mrargs{stable=true, update=false};
"stale" when Val == "update_after" orelse Val == <<"update_after">> ->
- Args#mrargs{stale=update_after};
+ Args#mrargs{stable=true, update=lazy};
"stale" ->
throw({query_parse_error, <<"Invalid value for `stale`.">>});
+ "stable" when Val == "true" orelse Val == <<"true">> ->
+ Args#mrargs{stable=true};
+ "stable" when Val == "false" orelse Val == <<"false">> ->
+ Args#mrargs{stable=false};
+ "stable" ->
+ throw({query_parse_error, <<"Invalid value for `stable`.">>});
+ "update" when Val == "true" orelse Val == <<"true">> ->
+ Args#mrargs{update=true};
+ "update" when Val == "false" orelse Val == <<"false">> ->
+ Args#mrargs{update=false};
+ "update" when Val == "lazy" orelse Val == <<"lazy">> ->
+ Args#mrargs{update=lazy};
+ "update" ->
+ throw({query_parse_error, <<"Invalid value for `update`.">>});
"descending" ->
case parse_boolean(Val) of
true -> Args#mrargs{direction=rev};
diff --git a/src/couch_mrview_util.erl b/src/couch_mrview_util.erl
index fa81ac9..3830b96 100644
--- a/src/couch_mrview_util.erl
+++ b/src/couch_mrview_util.erl
@@ -44,15 +44,15 @@
DbUpdateSeq = couch_util:with_db(Db, fun(WDb) ->
couch_db:get_update_seq(WDb)
end),
- MinSeq = case Args2#mrargs.stale of
- ok -> 0; update_after -> 0; _ -> DbUpdateSeq
+ MinSeq = case Args2#mrargs.update of
+ false -> 0; lazy -> 0; _ -> DbUpdateSeq
end,
{ok, State} = case couch_index:get_state(Pid, MinSeq) of
{ok, _} = Resp -> Resp;
Error -> throw(Error)
end,
Ref = erlang:monitor(process, State#mrst.fd),
- if Args2#mrargs.stale == update_after ->
+ if Args2#mrargs.update == lazy ->
spawn(fun() -> catch couch_index:get_state(Pid, DbUpdateSeq) end);
true -> ok
end,
@@ -476,11 +476,17 @@
{map, _} -> mrverror(<<"Invalid use of grouping on a map view.">>)
end,
- case Args#mrargs.stale of
- ok -> ok;
- update_after -> ok;
+ case Args#mrargs.stable of
+ true -> ok;
false -> ok;
- _ -> mrverror(<<"Invalid value for `stale`.">>)
+ _ -> mrverror(<<"Invalid value for `stable`.">>)
+ end,
+
+ case Args#mrargs.update of
+ true -> ok;
+ false -> ok;
+ lazy -> ok;
+ _ -> mrverror(<<"Invalid value for `update`.">>)
end,
case is_boolean(Args#mrargs.inclusive_end) of