summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2008-12-16 13:35:14 +0000
committerMatthias Radestock <matthias@lshift.net>2008-12-16 13:35:14 +0000
commita4684ace71798cf4eea76a0c84e6a48c911b7857 (patch)
treebeb4ce34be2b42b596ef90c57d03a2611d619d1b /src
parentb69fe3fb62b9cb8950fa291e5023bc457c45d7c9 (diff)
downloadrabbitmq-server-git-a4684ace71798cf4eea76a0c84e6a48c911b7857.tar.gz
don't react to memory alarms when memory_alarms is false
We still register our alarm handler in that case, since that allows alertees to register as usual, but the handler doesn't remember alertees and does nothing on memory alarms.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit.erl4
-rw-r--r--src/rabbit_alarm.erl25
2 files changed, 20 insertions, 9 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 9dc2219bce..41064c772c 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -163,8 +163,8 @@ start(normal, []) ->
ok = rabbit_amqqueue:start(),
- {ok, ShouldStartMemsup} = application:get_env(start_memsup),
- ok = rabbit_alarm:start(ShouldStartMemsup),
+ {ok, MemoryAlarms} = application:get_env(memory_alarms),
+ ok = rabbit_alarm:start(MemoryAlarms),
ok = rabbit_binary_generator:
check_empty_content_body_frame_size(),
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl
index 43c4ad90c0..7bbed8b715 100644
--- a/src/rabbit_alarm.erl
+++ b/src/rabbit_alarm.erl
@@ -55,12 +55,12 @@
%%----------------------------------------------------------------------------
-start(StartMemsup) ->
- ok = alarm_handler:add_alarm_handler(?MODULE),
+start(MemoryAlarms) ->
+ ok = alarm_handler:add_alarm_handler(?MODULE, [MemoryAlarms]),
case whereis(memsup) of
- undefined -> if StartMemsup -> ok = start_memsup(),
- ok = adjust_memsup_interval();
- true -> ok
+ undefined -> if MemoryAlarms -> ok = start_memsup(),
+ ok = adjust_memsup_interval();
+ true -> ok
end;
_ -> ok = adjust_memsup_interval()
end.
@@ -74,9 +74,15 @@ register(Pid, HighMemMFA) ->
%%----------------------------------------------------------------------------
-init([]) ->
- {ok, #alarms{alertees = dict:new()}}.
+init([MemoryAlarms]) ->
+ {ok, #alarms{alertees = case MemoryAlarms of
+ true -> dict:new();
+ false -> undefined
+ end}}.
+handle_call({register, _Pid, _HighMemMFA},
+ State = #alarms{alertees = undefined}) ->
+ {ok, ok, State};
handle_call({register, Pid, HighMemMFA},
State = #alarms{alertees = Alertess}) ->
_MRef = erlang:monitor(process, Pid),
@@ -102,6 +108,9 @@ handle_event({clear_alarm, system_memory_high_watermark}, State) ->
handle_event(_Event, State) ->
{ok, State}.
+handle_info({'DOWN', _MRef, process, _Pid, _Reason},
+ State = #alarms{alertees = undefined}) ->
+ {ok, State};
handle_info({'DOWN', _MRef, process, Pid, _Reason},
State = #alarms{alertees = Alertess}) ->
{ok, State#alarms{alertees = dict:erase(Pid, Alertess)}};
@@ -165,6 +174,8 @@ adjust_memsup_interval() ->
{set_check_interval, ?MEMSUP_CHECK_INTERVAL},
infinity).
+alert(_Alert, undefined) ->
+ ok;
alert(Alert, Alertees) ->
dict:fold(fun (Pid, {M, F, A}, Acc) ->
ok = erlang:apply(M, F, A ++ [Pid, Alert]),