You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by da...@apache.org on 2014/08/21 08:47:13 UTC

couch-replicator commit: updated refs/heads/windsor-merge to aafb5f9

Repository: couchdb-couch-replicator
Updated Branches:
  refs/heads/windsor-merge a85e9b89b -> aafb5f9d9


Update to use couch_stats


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/aafb5f9d
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/tree/aafb5f9d
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/diff/aafb5f9d

Branch: refs/heads/windsor-merge
Commit: aafb5f9d9b97d0cadb21b10e338cca6c9caf6afd
Parents: a85e9b8
Author: Paul J. Davis <pa...@gmail.com>
Authored: Thu Aug 21 01:47:01 2014 -0500
Committer: Paul J. Davis <pa...@gmail.com>
Committed: Thu Aug 21 01:47:01 2014 -0500

----------------------------------------------------------------------
 priv/stats_descriptions.cfg             | 56 ++++++++++++++++++++++++++++
 src/couch_replicator.app.src            |  3 +-
 src/couch_replicator.erl                | 10 +++++
 src/couch_replicator_changes_reader.erl |  3 ++
 src/couch_replicator_httpc.erl          |  9 +++++
 5 files changed, 80 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/aafb5f9d/priv/stats_descriptions.cfg
----------------------------------------------------------------------
diff --git a/priv/stats_descriptions.cfg b/priv/stats_descriptions.cfg
new file mode 100644
index 0000000..2564f92
--- /dev/null
+++ b/priv/stats_descriptions.cfg
@@ -0,0 +1,56 @@
+{[couch_replicator, changes_read_failures], [
+    {type, counter},
+    {desc, <<"number of failed replicator changes read failures">>}
+]}.
+{[couch_replicator, changes_reader_deaths], [
+    {type, counter},
+    {desc, <<"number of failed replicator changes readers">>}
+]}.
+{[couch_replicator, changes_manager_deaths], [
+    {type, counter},
+    {desc, <<"number of failed replicator changes managers">>}
+]}.
+{[couch_replicator, changes_queue_deaths], [
+    {type, counter},
+    {desc, <<"number of failed replicator changes work queues">>}
+]}.
+{[couch_replicator, checkpoints, success], [
+    {type, counter},
+    {desc, <<"number of checkpoints successfully saves">>}
+]}.
+{[couch_replicator, checkpoints, failure], [
+    {type, counter},
+    {desc, <<"number of failed checkpoint saves">>}
+]}.
+{[couch_replicator, failed_starts], [
+    {type, counter},
+    {desc, <<"number of replications that have failed to start">>}
+]}.
+{[couch_replicator, requests], [
+    {type, counter},
+    {desc, <<"number of HTTP requests made by the replicator">>}
+]}.
+{[couch_replicator, responses, failure], [
+    {type, counter},
+    {desc, <<"number of failed HTTP responses received by the replicator">>}
+]}.
+{[couch_replicator, responses, success], [
+    {type, counter},
+    {desc, <<"number of successful HTTP responses received by the replicator">>}
+]}.
+{[couch_replicator, stream_responses, failure], [
+    {type, counter},
+    {desc, <<"number of failed streaming HTTP responses received by the replicator">>}
+]}.
+{[couch_replicator, stream_responses, success], [
+    {type, counter},
+    {desc, <<"number of successful streaming HTTP responses received by the replicator">>}
+]}.
+{[couch_replicator, worker_deaths], [
+    {type, counter},
+    {desc, <<"number of failed replicator workers">>}
+]}.
+{[couch_replicator, workers_started], [
+    {type, counter},
+    {desc, <<"number of replicator workers started">>}
+]}.

http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/aafb5f9d/src/couch_replicator.app.src
----------------------------------------------------------------------
diff --git a/src/couch_replicator.app.src b/src/couch_replicator.app.src
index f4470f2..4f12195 100644
--- a/src/couch_replicator.app.src
+++ b/src/couch_replicator.app.src
@@ -39,7 +39,8 @@
         couch_log,
         mem3,
         couch,
-        couch_event
+        couch_event,
+        couch_stats
     ]}
 ]}.
 

http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/aafb5f9d/src/couch_replicator.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator.erl b/src/couch_replicator.erl
index 6bfd3bb..ee45d0b 100644
--- a/src/couch_replicator.erl
+++ b/src/couch_replicator.erl
@@ -265,6 +265,7 @@ do_init(#rep{options = Options, id = {BaseId, Ext}, user_ctx=UserCtx} = Rep) ->
     MaxConns = get_value(http_connections, Options),
     Workers = lists:map(
         fun(_) ->
+            couch_stats:increment_counter([couch_replicator, workers_started]),
             {ok, Pid} = couch_replicator_worker:start_link(
                 self(), Source, Target, ChangesManager, MaxConns),
             Pid
@@ -347,6 +348,7 @@ handle_info({'EXIT', Pid, normal}, #rep_state{changes_reader=Pid} = State) ->
     {noreply, State};
 
 handle_info({'EXIT', Pid, Reason}, #rep_state{changes_reader=Pid} = State) ->
+    couch_stats:increment_counter([couch_replicator, changes_reader_deaths]),
     couch_log:error("ChangesReader process died with reason: ~p", [Reason]),
     {stop, changes_reader_died, cancel_timer(State)};
 
@@ -354,6 +356,7 @@ handle_info({'EXIT', Pid, normal}, #rep_state{changes_manager = Pid} = State) ->
     {noreply, State};
 
 handle_info({'EXIT', Pid, Reason}, #rep_state{changes_manager = Pid} = State) ->
+    couch_stats:increment_counter([couch_replicator, changes_manager_deaths]),
     couch_log:error("ChangesManager process died with reason: ~p", [Reason]),
     {stop, changes_manager_died, cancel_timer(State)};
 
@@ -361,6 +364,7 @@ handle_info({'EXIT', Pid, normal}, #rep_state{changes_queue=Pid} = State) ->
     {noreply, State};
 
 handle_info({'EXIT', Pid, Reason}, #rep_state{changes_queue=Pid} = State) ->
+    couch_stats:increment_counter([couch_replicator, changes_queue_deaths]),
     couch_log:error("ChangesQueue process died with reason: ~p", [Reason]),
     {stop, changes_queue_died, cancel_timer(State)};
 
@@ -385,6 +389,7 @@ handle_info({'EXIT', Pid, Reason}, #rep_state{workers = Workers} = State) ->
     false ->
         {stop, {unknown_process_died, Pid, Reason}, State2};
     true ->
+        couch_stats:increment_counter([couch_replicator, worker_deaths]),
         couch_log:error("Worker ~p died with reason: ~p", [Pid, Reason]),
         {stop, {worker_died, Pid, Reason}, State2}
     end;
@@ -453,8 +458,10 @@ handle_cast({db_compacted, DbName},
 handle_cast(checkpoint, State) ->
     case do_checkpoint(State) of
     {ok, NewState} ->
+        couch_stats:increment_counter([couch_replicator, checkpoints, success]),
         {noreply, NewState#rep_state{timer = start_timer(State)}};
     Error ->
+        couch_stats:increment_counter([couch_replicator, checkpoints, failure]),
         {stop, Error, State}
     end;
 
@@ -493,6 +500,7 @@ terminate(Reason, #rep_state{} = State) ->
 
 terminate(shutdown, {error, Class, Error, Stack, InitArgs}) ->
     #rep{id=RepId} = InitArgs,
+    couch_stats:increment_counter([couch_replicator, failed_starts]),
     couch_log:error("~p:~p: Replication failed to start for args ~p: ~p",
              [Class, Error, InitArgs, Stack]),
     case Error of
@@ -521,8 +529,10 @@ do_last_checkpoint(#rep_state{seqs_in_progress = [],
     highest_seq_done = Seq} = State) ->
     case do_checkpoint(State#rep_state{current_through_seq = Seq}) of
     {ok, NewState} ->
+        couch_stats:increment_counter([couch_replicator, checkpoints, success]),
         {stop, normal, cancel_timer(NewState)};
     Error ->
+        couch_stats:increment_counter([couch_replicator, checkpoints, failure]),
         {stop, Error, State}
     end.
 

http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/aafb5f9d/src/couch_replicator_changes_reader.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_changes_reader.erl b/src/couch_replicator_changes_reader.erl
index 623e8f9..b7d18e0 100644
--- a/src/couch_replicator_changes_reader.erl
+++ b/src/couch_replicator_changes_reader.erl
@@ -53,6 +53,9 @@ read_changes(Parent, StartSeq, Db, ChangesQueue, Options, Ts) ->
             LS = get(last_seq),
             read_changes(Parent, LS, Db, ChangesQueue, Options, Ts+1);
         exit:{http_request_failed, _, _, _} = Error ->
+        couch_stats:increment_counter(
+            [couch_replicator, changes_read_failures]
+        ),
         case get(retries_left) of
         N when N > 0 ->
             put(retries_left, N - 1),

http://git-wip-us.apache.org/repos/asf/couchdb-couch-replicator/blob/aafb5f9d/src/couch_replicator_httpc.erl
----------------------------------------------------------------------
diff --git a/src/couch_replicator_httpc.erl b/src/couch_replicator_httpc.erl
index ecd6a3e..985f0c7 100644
--- a/src/couch_replicator_httpc.erl
+++ b/src/couch_replicator_httpc.erl
@@ -35,6 +35,7 @@ setup(#httpdb{httpc_pool = nil, url = Url, http_connections = MaxConns} = Db) ->
 
 
 send_req(HttpDb, Params1, Callback) ->
+    couch_stats:increment_counter([couch_replicator, requests]),
     Params2 = ?replace(Params1, qs,
         [{K, ?b2l(iolist_to_binary(V))} || {K, V} <- get_value(qs, Params1, [])]),
     Params = ?replace(Params2, ibrowse_options,
@@ -102,6 +103,7 @@ process_response({ibrowse_req_id, ReqId}, Worker, HttpDb, Params, Callback) ->
 process_response({ok, Code, Headers, Body}, Worker, HttpDb, Params, Callback) ->
     case list_to_integer(Code) of
     Ok when (Ok >= 200 andalso Ok < 300) ; (Ok >= 400 andalso Ok < 500) ->
+        couch_stats:increment_counter([couch_replicator, responses, success]),
         EJson = case Body of
         <<>> ->
             null;
@@ -112,6 +114,7 @@ process_response({ok, Code, Headers, Body}, Worker, HttpDb, Params, Callback) ->
     R when R =:= 301 ; R =:= 302 ; R =:= 303 ->
         do_redirect(Worker, R, Headers, HttpDb, Params, Callback);
     Error ->
+        couch_stats:increment_counter([couch_replicator, responses, failure]),
         maybe_retry({code, Error}, Worker, HttpDb, Params)
     end;
 
@@ -138,9 +141,15 @@ process_stream_response(ReqId, Worker, HttpDb, Params, Callback) ->
         R when R =:= 301 ; R =:= 302 ; R =:= 303 ->
             do_redirect(Worker, R, Headers, HttpDb, Params, Callback);
         Error ->
+            couch_stats:increment_counter(
+                [couch_replicator, stream_responses, failure]
+            ),
             report_error(Worker, HttpDb, Params, {code, Error})
         end;
     {ibrowse_async_response, ReqId, {error, _} = Error} ->
+        couch_stats:increment_counter(
+            [couch_replicator, stream_responses, failure]
+        ),
         maybe_retry(Error, Worker, HttpDb, Params)
     after HttpDb#httpdb.timeout + 500 ->
         % Note: ibrowse should always reply with timeouts, but this doesn't