You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2016/04/17 20:43:18 UTC

fabric commit: updated refs/heads/master to dc5cca8

Repository: couchdb-fabric
Updated Branches:
  refs/heads/master 1be5506e3 -> dc5cca804


Honor update_seq=true for map view requests

COUCHDB-2849


Project: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/commit/dc5cca80
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/tree/dc5cca80
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-fabric/diff/dc5cca80

Branch: refs/heads/master
Commit: dc5cca804132266edec7a62cb2ca6b36cfadab27
Parents: 1be5506
Author: Robert Newson <rn...@apache.org>
Authored: Sun Apr 17 19:18:16 2016 +0100
Committer: Robert Newson <rn...@apache.org>
Committed: Sun Apr 17 19:18:16 2016 +0100

----------------------------------------------------------------------
 include/fabric.hrl      |  3 ++-
 src/fabric_view_map.erl | 22 ++++++++++++++++++----
 2 files changed, 20 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-fabric/blob/dc5cca80/include/fabric.hrl
----------------------------------------------------------------------
diff --git a/include/fabric.hrl b/include/fabric.hrl
index 29fc1ff..be1d639 100644
--- a/include/fabric.hrl
+++ b/include/fabric.hrl
@@ -30,7 +30,8 @@
     collation,
     lang,
     sorted,
-    user_acc
+    user_acc,
+    update_seq
 }).
 
 -record(stream_acc, {

http://git-wip-us.apache.org/repos/asf/couchdb-fabric/blob/dc5cca80/src/fabric_view_map.erl
----------------------------------------------------------------------
diff --git a/src/fabric_view_map.erl b/src/fabric_view_map.erl
index 7e27637..a71e01a 100644
--- a/src/fabric_view_map.erl
+++ b/src/fabric_view_map.erl
@@ -58,7 +58,7 @@ go(DbName, DDoc, View, Args, Callback, Acc, VInfo) ->
     end.
 
 go(DbName, Workers, {map, View, _}, Args, Callback, Acc0) ->
-    #mrargs{limit = Limit, skip = Skip, keys = Keys} = Args,
+    #mrargs{limit = Limit, skip = Skip, keys = Keys, update_seq=UpdateSeq} = Args,
     Collation = couch_util:get_value(<<"collation">>, View#mrview.options),
     State = #collector{
         db_name=DbName,
@@ -70,7 +70,8 @@ go(DbName, Workers, {map, View, _}, Args, Callback, Acc0) ->
         keys = fabric_view:keydict(Keys),
         sorted = Args#mrargs.sorted,
         collation = Collation,
-        user_acc = Acc0
+        user_acc = Acc0,
+        update_seq = case UpdateSeq of true -> []; false -> nil end
     },
     case rexi_utils:recv(Workers, #shard.ref, fun handle_message/3,
         State, infinity, 1000 * 60 * 60) of
@@ -91,12 +92,14 @@ handle_message({rexi_EXIT, Reason}, Worker, State) ->
 handle_message({meta, Meta0}, {Worker, From}, State) ->
     Tot = couch_util:get_value(total, Meta0, 0),
     Off = couch_util:get_value(offset, Meta0, 0),
+    Seq = couch_util:get_value(update_seq, Meta0, 0),
     #collector{
         callback = Callback,
         counters = Counters0,
         total_rows = Total0,
         offset = Offset0,
-        user_acc = AccIn
+        user_acc = AccIn,
+        update_seq = UpdateSeq0
     } = State,
     % Assert that we don't have other messages from this
     % worker when the total_and_offset message arrives.
@@ -105,16 +108,27 @@ handle_message({meta, Meta0}, {Worker, From}, State) ->
     Counters1 = fabric_dict:update_counter(Worker, 1, Counters0),
     Total = Total0 + Tot,
     Offset = Offset0 + Off,
+    UpdateSeq = case UpdateSeq0 of
+        nil -> nil;
+        _   -> [{Worker, Seq} | UpdateSeq0]
+    end,
     case fabric_dict:any(0, Counters1) of
     true ->
         {ok, State#collector{
             counters = Counters1,
             total_rows = Total,
+            update_seq = UpdateSeq,
             offset = Offset
         }};
     false ->
         FinalOffset = erlang:min(Total, Offset+State#collector.skip),
-        Meta = [{total, Total}, {offset, FinalOffset}],
+        Meta = [{total, Total}, {offset, FinalOffset}] ++
+            case UpdateSeq of
+                nil ->
+                    [];
+                _ ->
+                    [{update_seq, fabric_view_changes:pack_seqs(UpdateSeq)}]
+            end,
         {Go, Acc} = Callback({meta, Meta}, AccIn),
         {Go, State#collector{
             counters = fabric_dict:decrement_all(Counters1),