couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rnew...@apache.org
Subject [07/37] couch-replicator commit: updated refs/heads/master to aafb5f9
Date Thu, 28 Aug 2014 12:15:38 GMT
Fix replication checkpoint frequency

The patch to track and checkpoint last_seq values seen in the _changes
feed resulted in high frequency updates to the checkpoint document. This
is because the comparison made for "needs a checkpoint" was including
the replicator's incrementing counter which the changes reader was
bumping each time it saw last_seq even if it was the same last_seq as
the previous time.

This just compares the new last_seq value to the old last_seq value and
if they're equal then skips notifying the replication manager so that no
superfluous checkpoint is made.


Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/commit/6acc906b
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/6acc906b
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/6acc906b

Branch: refs/heads/master
Commit: 6acc906b41130319961c210ac76bdd3835eff6ed
Parents: d6079a6
Author: Paul J. Davis <paul.joseph.davis@gmail.com>
Authored: Mon Jun 17 20:02:58 2013 -0500
Committer: Robert Newson <rnewson@apache.org>
Committed: Tue Jul 29 13:48:06 2014 +0100

----------------------------------------------------------------------
 src/couch_replicator.erl | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/6acc906b/src/couch_replicator.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator.erl b/src/couch_replicator.erl
index 895bbcc..3ef5e9c 100644
--- a/src/couch_replicator.erl
+++ b/src/couch_replicator.erl
@@ -659,7 +659,11 @@ read_changes(Parent, StartSeq, Db, ChangesQueue, Options, Ts) ->
                     % LS should never be undefined, but it doesn't hurt to be
                     % defensive inside the replicator.
                     Seq = case LS of undefined -> get(last_seq); _ -> LS end,
-                    ok = gen_server:call(Parent, {report_seq_done, {Ts, Seq}, #rep_stats{}},
infinity),
+                    OldSeq = get(last_seq),
+                    if Seq == OldSeq -> ok; true ->
+                        Msg = {report_seq_done, {Ts, Seq}, #rep_stats{}},
+                        ok = gen_server:call(Parent, Msg, infinity)
+                    end,
                     put(last_seq, Seq),
                     read_changes(Parent, Seq, Db, ChangesQueue, Options, Ts + 1);
                 _ ->


Mime
View raw message