diff options
| author | Adam Kocoloski <adam@cloudant.com> | 2010-06-11 16:07:16 -0400 |
|---|---|---|
| committer | Adam Kocoloski <adam@cloudant.com> | 2010-06-11 16:07:16 -0400 |
| commit | cc6785194931a8c1b4e481a47decb1a3afc49e8d (patch) | |
| tree | f30c470b9577b6751132d81f9f9c19227c8a95c7 | |
| parent | 699dda57fc02239a7b0f1740b5b82ba3763a66d1 (diff) | |
updates to better support _changes HTTP resource
| -rw-r--r-- | src/fabric.erl | 6 | ||||
| -rw-r--r-- | src/fabric_view_changes.erl | 23 |
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))). |
