couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From kocol...@apache.org
Subject svn commit: r832477 - /couchdb/trunk/src/couchdb/couch_stats_aggregator.erl
Date Tue, 03 Nov 2009 17:15:38 GMT
Author: kocolosk
Date: Tue Nov  3 17:15:37 2009
New Revision: 832477

URL: http://svn.apache.org/viewvc?rev=832477&view=rev
Log:
eliminate new process flood after OS wakes from sleep. COUCHDB-539

Modified:
    couchdb/trunk/src/couchdb/couch_stats_aggregator.erl

Modified: couchdb/trunk/src/couchdb/couch_stats_aggregator.erl
URL: http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_stats_aggregator.erl?rev=832477&r1=832476&r2=832477&view=diff
==============================================================================
--- couchdb/trunk/src/couchdb/couch_stats_aggregator.erl (original)
+++ couchdb/trunk/src/couchdb/couch_stats_aggregator.erl Tue Nov  3 17:15:37 2009
@@ -86,7 +86,7 @@
     to_json_term(?MODULE:get(Key, Time)).
 
 collect_sample() ->
-    gen_server:call(?MODULE, collect_sample).
+    gen_server:call(?MODULE, collect_sample, infinity).
 
 
 init(StatDescsFileName) ->
@@ -115,13 +115,15 @@
     
     Rate = list_to_integer(couch_config:get("stats", "rate", "1000")),
     % TODO: Add timer_start to kernel start options.
-    timer:apply_interval(Rate, ?MODULE, collect_sample, []).
+    {ok, TRef} = timer:apply_after(Rate, ?MODULE, collect_sample, []),
+    {ok, {TRef, Rate}}.
     
-terminate(_Reason, TRef) ->
+terminate(_Reason, {TRef, _Rate}) ->
     timer:cancel(TRef),
     ok.
 
-handle_call(collect_sample, _, State) ->
+handle_call(collect_sample, _, {_TRef, SampleInterval}) ->
+    {ok, TRef} = timer:apply_after(SampleInterval, ?MODULE, collect_sample, []),
     % Gather new stats values to add.
     Incs = lists:map(fun({Key, Value}) ->
         {Key, {incremental, Value}}
@@ -151,7 +153,7 @@
         end,
         ets:insert(?MODULE, {{Key, Rate}, NewAgg})
     end, ets:tab2list(?MODULE)),
-    {reply, ok, State}.
+    {reply, ok, {TRef, SampleInterval}}.
 
 handle_cast(stop, State) ->
     {stop, normal, State}.



Mime
View raw message