You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by fd...@apache.org on 2010/10/25 01:41:14 UTC

svn commit: r1026916 - /couchdb/branches/new_replicator/src/couchdb/couch_replicator.erl

Author: fdmanana
Date: Sun Oct 24 23:41:14 2010
New Revision: 1026916

URL: http://svn.apache.org/viewvc?rev=1026916&view=rev
Log:
New replicator: fixes for determining the next checkpoint source sequence number.

Modified:
    couchdb/branches/new_replicator/src/couchdb/couch_replicator.erl

Modified: couchdb/branches/new_replicator/src/couchdb/couch_replicator.erl
URL: http://svn.apache.org/viewvc/couchdb/branches/new_replicator/src/couchdb/couch_replicator.erl?rev=1026916&r1=1026915&r2=1026916&view=diff
==============================================================================
--- couchdb/branches/new_replicator/src/couchdb/couch_replicator.erl (original)
+++ couchdb/branches/new_replicator/src/couchdb/couch_replicator.erl Sun Oct 24 23:41:14 2010
@@ -666,21 +666,26 @@ process_seq_changes_done({Seq, NumChange
     } = State,
 
     Total = gb_trees:get(Seq, SeqsInProgress),
-    SeqsInProgress2 = case Total - NumChangesDone of
+    {ThroughSeq2, SeqsInProgress2, DoneSeqs2} = case Total - NumChangesDone of
     0 ->
-        gb_trees:delete(Seq, SeqsInProgress);
+        {NewDoneSeqs, NewThroughSeq} = case gb_trees:smallest(SeqsInProgress) of
+        {Seq, Total} ->
+            {DoneSeqs, Seq};
+        _ ->
+            {ordsets:add_element(Seq, DoneSeqs), ThroughSeq}
+        end,
+        {NewThroughSeq, gb_trees:delete(Seq, SeqsInProgress), NewDoneSeqs};
     NewTotal when NewTotal > 0 ->
-        gb_trees:update(Seq, NewTotal, SeqsInProgress)
+        {ThroughSeq, gb_trees:update(Seq, NewTotal, SeqsInProgress), DoneSeqs}
     end,
 
-    DoneSeqs2 = ordsets:add_element(Seq, DoneSeqs),
-    {NewThroughSeq, DoneSeqs3} =
-        get_next_through_seq(ThroughSeq, SeqsInProgress2, DoneSeqs2),
+    {ThroughSeq3, DoneSeqs3} =
+        get_next_through_seq(ThroughSeq2, SeqsInProgress2, DoneSeqs2),
 
     State#rep_state{
         seqs_in_progress = SeqsInProgress2,
         next_through_seqs = DoneSeqs3,
-        current_through_seq = NewThroughSeq
+        current_through_seq = ThroughSeq3
     }.