summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Kocoloski <adam@cloudant.com>2010-06-11 16:07:16 -0400
committerAdam Kocoloski <adam@cloudant.com>2010-06-11 16:07:16 -0400
commitcc6785194931a8c1b4e481a47decb1a3afc49e8d (patch)
treef30c470b9577b6751132d81f9f9c19227c8a95c7
parent699dda57fc02239a7b0f1740b5b82ba3763a66d1 (diff)
updates to better support _changes HTTP resource
-rw-r--r--src/fabric.erl6
-rw-r--r--src/fabric_view_changes.erl23
2 files changed, 14 insertions, 15 deletions
diff --git a/src/fabric.erl b/src/fabric.erl
index dcd751a9..5abb17e3 100644
--- a/src/fabric.erl
+++ b/src/fabric.erl
@@ -9,7 +9,7 @@
update_docs/3, att_receiver/2]).
% Views
--export([all_docs/4, changes/3, query_view/3, query_view/4, query_view/6,
+-export([all_docs/4, changes/4, query_view/3, query_view/4, query_view/6,
get_view_group_info/2]).
% miscellany
@@ -68,10 +68,10 @@ all_docs(DbName, #view_query_args{} = QueryArgs, Callback, Acc0) when
is_function(Callback, 2) ->
fabric_view_all_docs:go(dbname(DbName), QueryArgs, Callback, Acc0).
-changes(DbName, Options, Callback) ->
+changes(DbName, Options, Callback, Acc0) ->
% TODO use a keylist for Options instead of #changes_args, BugzID 10281
Feed = Options#changes_args.feed,
- fabric_view_changes:go(dbname(DbName), Feed, Options, Callback).
+ fabric_view_changes:go(dbname(DbName), Feed, Options, Callback, Acc0).
query_view(DbName, DesignName, ViewName) ->
query_view(DbName, DesignName, ViewName, #view_query_args{}).
diff --git a/src/fabric_view_changes.erl b/src/fabric_view_changes.erl
index 666a85c6..39a57176 100644
--- a/src/fabric_view_changes.erl
+++ b/src/fabric_view_changes.erl
@@ -1,13 +1,13 @@
-module(fabric_view_changes).
--export([go/4, start_update_notifier/1]).
+-export([go/5, start_update_notifier/1]).
-include("fabric.hrl").
-go(DbName, Feed, Options, Callback) when Feed == "continuous" orelse
+go(DbName, Feed, Options, Callback, Acc0) when Feed == "continuous" orelse
Feed == "longpoll" ->
Args = make_changes_args(Options),
- {ok, Acc0} = Callback(start, Feed),
+ {ok, Acc} = Callback(start, Acc0),
Notifiers = start_update_notifiers(DbName),
{Timeout, TimeoutFun} = couch_changes:get_changes_timeout(Args, Callback),
try
@@ -16,7 +16,7 @@ go(DbName, Feed, Options, Callback) when Feed == "continuous" orelse
Args,
Callback,
get_start_seq(DbName, Args),
- Acc0,
+ Acc,
Timeout,
TimeoutFun
)
@@ -25,24 +25,23 @@ go(DbName, Feed, Options, Callback) when Feed == "continuous" orelse
couch_changes:get_rest_db_updated()
end;
-go(DbName, "normal", Options, Callback) ->
+go(DbName, "normal", Options, Callback, Acc0) ->
Args = make_changes_args(Options),
- {ok, Acc0} = Callback(start, "normal"),
+ {ok, Acc} = Callback(start, Acc0),
{ok, #collector{counters=Seqs, user_acc=AccOut}} = send_changes(
DbName,
Args,
Callback,
get_start_seq(DbName, Args),
- Acc0
+ Acc
),
- Callback({stop, pack_seqs(Seqs)}, AccOut),
- {ok, AccOut}.
+ Callback({stop, pack_seqs(Seqs)}, AccOut).
keep_sending_changes(DbName, Args, Callback, Seqs, AccIn, Timeout, TFun) ->
#changes_args{limit=Limit, feed=Feed} = Args,
{ok, Collector} = send_changes(DbName, Args, Callback, Seqs, AccIn),
- #collector{limit=Limit2, counters=Seqs, user_acc=AccOut} = Collector,
- LastSeq = pack_seqs(Seqs),
+ #collector{limit=Limit2, counters=NewSeqs, user_acc=AccOut} = Collector,
+ LastSeq = pack_seqs(NewSeqs),
if Limit > Limit2, Feed == "longpoll" ->
Callback({stop, LastSeq}, AccOut);
true ->
@@ -204,7 +203,7 @@ unpack_seqs("0", DbName) ->
unpack_seqs(Packed, DbName) ->
% TODO relies on internal structure of fabric_dict as keylist
lists:map(fun({Node, [A,B], Seq}) ->
- Name = partitions:shard_name(DbName, A),
+ Name = partitions:shard_name(A, DbName),
{#shard{node=Node, range=[A,B], dbname=DbName, name=Name}, Seq}
end, binary_to_term(couch_util:decodeBase64Url(Packed))).