summaryrefslogtreecommitdiff
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
commit99695bfbfeb0a4d981a7fd77e0441d99b64265e4 (patch)
treebeb4ce34be2b42b596ef90c57d03a2611d619d1b
parent12eecb130cad163c12fb0339f5bcde77885d03ff (diff)
downloadrabbitmq-server-bug20019.tar.gz
don't react to memory alarms when memory_alarms is falsebug20019
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.
-rw-r--r--ebin/rabbit.app2
-rw-r--r--src/rabbit.erl4
-rw-r--r--src/rabbit_alarm.erl25
3 files changed, 21 insertions, 10 deletions
diff --git a/ebin/rabbit.app b/ebin/rabbit.app
index 5c99f516..93abd456 100644
--- a/ebin/rabbit.app
+++ b/ebin/rabbit.app
@@ -49,4 +49,4 @@
{default_user, <<"guest">>},
{default_pass, <<"guest">>},
{default_vhost, <<"/">>},
- {start_memsup, false}]}]}.
+ {memory_alarms, false}]}]}.
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 9dc2219b..41064c77 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 43c4ad90..7bbed8b7 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]),