Repository: couchdb-couch-replicator Updated Branches: refs/heads/1843-feature-bigcouch 17d421eb2 -> a8add8b92
configurable checkpoint interval 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/8354f42d Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/8354f42d Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/8354f42d Branch: refs/heads/1843-feature-bigcouch Commit: 8354f42d184ba26739609c7d6d6c9635669bc766 Parents: 17d421e Author: Robert Newson <[email protected]> Authored: Wed Nov 20 14:59:00 2013 +0000 Committer: Robert Newson <[email protected]> Committed: Thu Apr 24 13:10:18 2014 +0100 ---------------------------------------------------------------------- src/couch_replicator.erl | 25 ++++++++++++++----------- src/couch_replicator_utils.erl | 6 +++++- 2 files changed, 19 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/8354f42d/src/couch_replicator.erl ---------------------------------------------------------------------- diff --git a/src/couch_replicator.erl b/src/couch_replicator.erl index ce9ff67..d2cdbe5 100644 --- a/src/couch_replicator.erl +++ b/src/couch_replicator.erl @@ -71,7 +71,8 @@ source_monitor = nil, target_monitor = nil, source_seq = nil, - use_checkpoints = true + use_checkpoints = true, + checkpoint_interval = 5000 }). @@ -239,7 +240,8 @@ do_init(#rep{options = Options, id = {BaseId, Ext}, user_ctx=UserCtx} = Rep) -> target_name = TargetName, start_seq = {_Ts, StartSeq}, source_seq = SourceCurSeq, - committed_seq = {_, CommittedSeq} + committed_seq = {_, CommittedSeq}, + checkpoint_interval = CheckpointInterval } = State = init_state(Rep), NumWorkers = get_value(worker_processes, Options), @@ -282,7 +284,8 @@ do_init(#rep{options = Options, id = {BaseId, Ext}, user_ctx=UserCtx} = Rep) -> {doc_write_failures, 0}, {source_seq, SourceCurSeq}, {checkpointed_source_seq, CommittedSeq}, - {progress, 0} + {progress, 0}, + {checkpoint_interval, CheckpointInterval} ]), couch_task_status:set_update_frequency(1000), @@ -459,9 +462,11 @@ handle_cast({report_seq, Seq}, {noreply, State#rep_state{seqs_in_progress = NewSeqsInProgress}}. -code_change(_OldVsn, OldState, _Extra) when tuple_size(OldState) =:= 30 -> - {ok, erlang:append_element(OldState, true)}; -code_change(_OldVsn, State, _Extra) -> +code_change(OldVsn, OldState, Extra) when tuple_size(OldState) =:= 30 -> + code_change(OldVsn, erlang:append_element(OldState, true), Extra); +code_change(OldVsn, OldState, Extra) when tuple_size(OldState) =:= 31 -> + code_change(OldVsn, erlang:append_element(OldState, 5000), Extra); +code_change(_OldVsn, #rep_state{}=State, _Extra) -> {ok, State}. @@ -525,7 +530,7 @@ do_last_checkpoint(#rep_state{seqs_in_progress = [], start_timer(State) -> - After = checkpoint_interval(State), + After = State#rep_state.checkpoint_interval, case timer:apply_after(After, gen_server, cast, [self(), checkpoint]) of {ok, Ref} -> Ref; @@ -584,7 +589,8 @@ init_state(Rep) -> source_monitor = db_monitor(Source), target_monitor = db_monitor(Target), source_seq = get_value(<<"update_seq">>, SourceInfo, ?LOWEST_SEQ), - use_checkpoints = get_value(use_checkpoints, Options, true) + use_checkpoints = get_value(use_checkpoints, Options, true), + checkpoint_interval = get_value(checkpoint_interval, Options, 5000) }, State#rep_state{timer = start_timer(State)}. @@ -704,9 +710,6 @@ changes_manager_loop_open(Parent, ChangesQueue, BatchSize, Ts) -> end. -checkpoint_interval(_State) -> - 5000. - do_checkpoint(#rep_state{use_checkpoints=false} = State) -> NewState = State#rep_state{checkpoint_history = {[{<<"use_checkpoints">>, false}]} }, {ok, NewState}; http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/8354f42d/src/couch_replicator_utils.erl ---------------------------------------------------------------------- diff --git a/src/couch_replicator_utils.erl b/src/couch_replicator_utils.erl index 9b9dd74..8a22f7f 100644 --- a/src/couch_replicator_utils.erl +++ b/src/couch_replicator_utils.erl @@ -230,6 +230,7 @@ make_options(Props) -> DefTimeout = config:get("replicator", "connection_timeout", "30000"), DefRetries = config:get("replicator", "retries_per_request", "10"), UseCheckpoints = config:get("replicator", "use_checkpoints", "true"), + DefCheckpointInterval = config:get("replicator", "checkpoint_interval", "5000"), {ok, DefSocketOptions} = couch_util:parse_term( config:get("replicator", "socket_options", "[{keepalive, true}, {nodelay, false}]")), @@ -240,7 +241,8 @@ make_options(Props) -> {socket_options, DefSocketOptions}, {worker_batch_size, list_to_integer(DefBatchSize)}, {worker_processes, list_to_integer(DefWorkers)}, - {use_checkpoints, list_to_existing_atom(UseCheckpoints)} + {use_checkpoints, list_to_existing_atom(UseCheckpoints)}, + {checkpoint_interval, list_to_integer(DefCheckpointInterval)} ])). @@ -284,6 +286,8 @@ convert_options([{<<"since_seq">>, V} | R]) -> [{since_seq, V} | convert_options(R)]; convert_options([{<<"use_checkpoints">>, V} | R]) -> [{use_checkpoints, V} | convert_options(R)]; +convert_options([{<<"checkpoint_interval">>, V} | R]) -> + [{checkpoint_interval, couch_util:to_integer(V)} | convert_options(R)]; convert_options([_ | R]) -> % skip unknown option convert_options(R).
