You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2014/08/20 15:09:19 UTC
[11/14] couch-stats commit: updated refs/heads/master to bb24add
Store tracked processes in ets rather than dict
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/commit/7c44fe48
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/tree/7c44fe48
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/diff/7c44fe48
Branch: refs/heads/master
Commit: 7c44fe4816e3e3db711c35d7cfa02a76ea9e2aa6
Parents: 30fd32c
Author: Benjamin Anderson <b...@banjiewen.net>
Authored: Wed Feb 12 09:52:50 2014 -0800
Committer: Robert Newson <rn...@apache.org>
Committed: Tue Aug 19 14:48:31 2014 +0100
----------------------------------------------------------------------
src/couch_stats_process_tracker.erl | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-couch-stats/blob/7c44fe48/src/couch_stats_process_tracker.erl
----------------------------------------------------------------------
diff --git a/src/couch_stats_process_tracker.erl b/src/couch_stats_process_tracker.erl
index 825142b..3d25d03 100644
--- a/src/couch_stats_process_tracker.erl
+++ b/src/couch_stats_process_tracker.erl
@@ -17,7 +17,7 @@
]).
-record(st, {
- tracked
+
}).
-spec track(any()) -> ok.
@@ -32,24 +32,34 @@ start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
init([]) ->
- {ok, #st{tracked = dict:new()}}.
+ ets:new(?MODULE, [named_table]),
+ {ok, #st{}}.
handle_call(Msg, _From, State) ->
twig:log(notice, "~p received unknown call ~p", [?MODULE, Msg]),
{noreply, State}.
-handle_cast({track, Pid, Name}, #st{tracked=Tracked}=State) ->
+handle_cast({track, Pid, Name}, State) ->
couch_stats:increment_counter(Name),
Ref = erlang:monitor(process, Pid),
- {noreply, State#st{tracked=dict:store(Ref, Name, Tracked)}};
+ ets:insert(?MODULE, {Ref, Name}),
+ {noreply, State};
handle_cast(Msg, State) ->
twig:log(notice, "~p received unknown cast ~p", [?MODULE, Msg]),
{noreply, State}.
-handle_info({'DOWN', Ref, _, _, _}, #st{tracked=Tracked}=State) ->
- Name = dict:fetch(Ref, Tracked),
- couch_stats:decrement_counter(Name),
- {noreply, State#st{tracked=dict:erase(Ref, Tracked)}};
+handle_info({'DOWN', Ref, _, _, _}=Msg, State) ->
+ case ets:lookup(?MODULE, Ref) of
+ [] ->
+ twig:log(
+ notice,
+ "~p received unknown exit; message was ~p", [?MODULE, Msg]
+ );
+ [{Ref, Name}] ->
+ couch_stats:decrement_counter(Name),
+ ets:delete(?MODULE, Ref)
+ end,
+ {noreply, State};
handle_info(Msg, State) ->
twig:log(notice, "~p received unknown message ~p", [?MODULE, Msg]),
{noreply, State}.