summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmile Joubert <emile@rabbitmq.com>2012-03-28 11:14:58 +0100
committerEmile Joubert <emile@rabbitmq.com>2012-03-28 11:14:58 +0100
commit3331680ab15006fd54d03a1d3f0afed4f5f2bcd1 (patch)
treecd7db6dd1cc7b55e6383983786f617015571d9f9
parentdf68fb98eb95fbc44eaffe4848ecc71810cca82d (diff)
downloadrabbitmq-server-3331680ab15006fd54d03a1d3f0afed4f5f2bcd1.tar.gz
Alert remote and local alarm subscribers differently
-rw-r--r--src/rabbit_alarm.erl18
-rw-r--r--src/rabbit_reader.erl6
2 files changed, 13 insertions, 11 deletions
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl
index a286eea4..6e780218 100644
--- a/src/rabbit_alarm.erl
+++ b/src/rabbit_alarm.erl
@@ -157,29 +157,31 @@ maybe_alert(UpdateFun, Node, Source,
%% If we have changed our alarm state, inform the remotes.
IsLocal = Node =:= node(),
if IsLocal andalso BeforeSz < AfterSz ->
- ok = alert_remote({true, Alertees, Source});
+ ok = alert_remote(true, Alertees, Source);
IsLocal andalso BeforeSz > AfterSz ->
- ok = alert_remote({false, Alertees, Source});
+ ok = alert_remote(false, Alertees, Source);
true ->
ok
end,
%% If the overall alarm state has changed, inform the locals.
case {dict:size(AN), dict:size(AN1)} of
- {0, 1} -> ok = alert_local({true, Alertees, Source});
- {1, 0} -> ok = alert_local({false, Alertees, Source});
+ {0, 1} -> ok = alert_local(true, Alertees, Source);
+ {1, 0} -> ok = alert_local(false, Alertees, Source);
{_, _} -> ok
end,
State#alarms{alarmed_nodes = AN1}.
-alert_local(AlertSpec) -> alert(AlertSpec, fun erlang:'=:='/2).
+alert_local(Alert, Alertees, _Source) ->
+ alert(Alertees, [Alert], fun erlang:'=:='/2).
-alert_remote(AlertSpec) -> alert(AlertSpec, fun erlang:'=/='/2).
+alert_remote(Alert, Alertees, Source) ->
+ alert(Alertees, [Source, Alert], fun erlang:'=/='/2).
-alert({Alert, Alertees, Source}, NodeComparator) ->
+alert(Alertees, AlertArg, NodeComparator) ->
Node = node(),
dict:fold(fun (Pid, {M, F, A}, ok) ->
case NodeComparator(Node, node(Pid)) of
- true -> apply(M, F, A ++ [Pid, Source, Alert]);
+ true -> apply(M, F, A ++ [Pid] ++ AlertArg);
false -> ok
end
end, ok, Alertees).
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 5d08d28c..5e9e78d3 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -25,7 +25,7 @@
-export([init/4, mainloop/2]).
--export([conserve_resources/3, server_properties/1]).
+-export([conserve_resources/2, server_properties/1]).
-define(HANDSHAKE_TIMEOUT, 10).
-define(NORMAL_TIMEOUT, 3).
@@ -71,7 +71,7 @@
-spec(info/2 :: (pid(), rabbit_types:info_keys()) -> rabbit_types:infos()).
-spec(force_event_refresh/1 :: (pid()) -> 'ok').
-spec(shutdown/2 :: (pid(), string()) -> 'ok').
--spec(conserve_resources/3 :: (pid(), atom(), boolean()) -> 'ok').
+-spec(conserve_resources/2 :: (pid(), boolean()) -> 'ok').
-spec(server_properties/1 :: (rabbit_types:protocol()) ->
rabbit_framing:amqp_table()).
@@ -133,7 +133,7 @@ info(Pid, Items) ->
force_event_refresh(Pid) ->
gen_server:cast(Pid, force_event_refresh).
-conserve_resources(Pid, _Source, Conserve) ->
+conserve_resources(Pid, Conserve) ->
Pid ! {conserve_resources, Conserve},
ok.