diff options
author | Emile Joubert <emile@rabbitmq.com> | 2012-03-28 11:14:58 +0100 |
---|---|---|
committer | Emile Joubert <emile@rabbitmq.com> | 2012-03-28 11:14:58 +0100 |
commit | 3331680ab15006fd54d03a1d3f0afed4f5f2bcd1 (patch) | |
tree | cd7db6dd1cc7b55e6383983786f617015571d9f9 | |
parent | df68fb98eb95fbc44eaffe4848ecc71810cca82d (diff) | |
download | rabbitmq-server-3331680ab15006fd54d03a1d3f0afed4f5f2bcd1.tar.gz |
Alert remote and local alarm subscribers differently
-rw-r--r-- | src/rabbit_alarm.erl | 18 | ||||
-rw-r--r-- | src/rabbit_reader.erl | 6 |
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. |