You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by va...@apache.org on 2017/03/14 19:26:13 UTC
[18/50] couch-replicator commit: updated refs/heads/63012-scheduler
to 27a5eae
Simplify replicator doc processor logic
Condense all `worker_returned(Ref, Id, {ok, RepId})` sub-cases into
a single case statement
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/525e83e2
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/525e83e2
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/525e83e2
Branch: refs/heads/63012-scheduler
Commit: 525e83e2910a37d6514249568fdadcadbec2bae9
Parents: 13ea06b
Author: Nick Vatamaniuc <va...@apache.org>
Authored: Thu Nov 3 16:59:45 2016 -0400
Committer: Nick Vatamaniuc <va...@apache.org>
Committed: Thu Nov 3 16:59:45 2016 -0400
----------------------------------------------------------------------
src/couch_replicator_doc_processor.erl | 67 ++++++++++++-----------------
1 file changed, 28 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/525e83e2/src/couch_replicator_doc_processor.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_doc_processor.erl b/src/couch_replicator_doc_processor.erl
index 06ec743..733406f 100644
--- a/src/couch_replicator_doc_processor.erl
+++ b/src/couch_replicator_doc_processor.erl
@@ -227,8 +227,34 @@ updated_doc(Id, Rep, Filter) ->
worker_returned(Ref, Id, {ok, RepId}) ->
case ets:lookup(?MODULE, Id) of
[#rdoc{worker = Ref} = Row] ->
- NewRow = update_docs_row(Row, RepId),
- true = ets:insert(?MODULE, NewRow#rdoc{last_updated = os:timestamp()}),
+ Row0 = Row#rdoc{
+ state = scheduled,
+ errcnt = 0,
+ worker = nil,
+ last_updated = os:timestamp()
+ },
+ NewRow = case Row0 of
+ #rdoc{rid = RepId, filter = user} ->
+ % Filtered replication id didn't change.
+ Row0;
+ #rdoc{rid = nil, filter = user} ->
+ % Calculated new replication id for a filtered replication. Make sure
+ % to schedule another check as filter code could change. Replications
+ % starts could have been failing, so also clear error count.
+ Row0#rdoc{rid = RepId};
+ #rdoc{rid = OldRepId, filter = user} ->
+ % Replication id of existing replication job with filter has changed.
+ % Remove old replication job from scheduler and schedule check to check
+ % for future changes.
+ ok = couch_replicator_scheduler:remove_job(OldRepId),
+ Msg = io_lib:format("Replication id changed: ~p -> ~p", [OldRepId, RepId]),
+ Row0#rdoc{info = couch_util:to_binary(Msg)};
+ #rdoc{rid = nil} ->
+ % Calculated new replication id for non-filtered replication. Remove
+ % replication doc body, after this we won't needed any more.
+ Row0#rdoc{rep=nil, rid=RepId, info=nil}
+ end,
+ true = ets:insert(?MODULE, NewRow),
ok = maybe_start_worker(Id);
_ ->
ok % doc could have been deleted, ignore
@@ -263,43 +289,6 @@ worker_returned(Ref, Id, {permanent_failure, _Reason}) ->
ok.
-% Filtered replication id didn't change.
--spec update_docs_row(#rdoc{}, rep_id()) -> #rdoc{}.
-update_docs_row(#rdoc{rid = RepId, filter = user} = Row, RepId) ->
- Row#rdoc{state = scheduled, errcnt = 0, worker = nil};
-
-% Calculated new replication id for a filtered replication. Make sure
-% to schedule another check as filter code could change. Replications starts
-% could have been failing, so also clear error count.
-update_docs_row(#rdoc{rid = nil, filter = user} = Row, RepId) ->
- Row#rdoc{rid = RepId, state = scheduled, errcnt = 0, worker = nil};
-
-% Replication id of existing replication job with filter has changed.
-% Remove old replication job from scheduler and schedule check to check for
-% future changes.
-update_docs_row(#rdoc{rid = OldRepId, filter = user} = Row, RepId) ->
- ok = couch_replicator_scheduler:remove_job(OldRepId),
- Msg = io_lib:format("Replication id changed: ~p -> ~p", [OldRepId, RepId]),
- Row#rdoc{
- rid = RepId,
- state = scheduled,
- info = couch_util:to_binary(Msg),
- errcnt = 0,
- worker = nil
- };
-
-% Calculated new replication id for non-filtered replication.
- update_docs_row(#rdoc{rid = nil} = Row, RepId) ->
- Row#rdoc{
- rep = nil, % remove replication doc body, after this we won't needed any more
- rid = RepId,
- state = scheduled,
- info = nil,
- errcnt = 0,
- worker = nil
- }.
-
-
-spec error_backoff(non_neg_integer()) -> seconds().
error_backoff(ErrCnt) ->
Exp = min(ErrCnt, ?ERROR_MAX_BACKOFF_EXPONENT),