summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_alarm.erl38
1 files changed, 16 insertions, 22 deletions
diff --git a/src/rabbit_alarm.erl b/src/rabbit_alarm.erl
index 34cc4d3c45..9f88d8da02 100644
--- a/src/rabbit_alarm.erl
+++ b/src/rabbit_alarm.erl
@@ -126,31 +126,25 @@ code_change(_OldVsn, State, _Extra) ->
maybe_alert(SetFun, Node, State = #alarms{alarmed_nodes = AN,
alertees = Alertees}) ->
AN1 = SetFun(Node, AN),
- ok = maybe_alert(sets:size(AN), sets:size(AN1), Alertees, Node),
+ BeforeSz = sets:size(AN),
+ AfterSz = sets:size(AN1),
+ %% If we have changed our alarm state, inform the remotes.
+ IsLocal = Node =:= node(),
+ if IsLocal andalso BeforeSz < AfterSz -> ok = alert_remote(true, Alertees);
+ IsLocal andalso BeforeSz > AfterSz -> ok = alert_remote(false, Alertees);
+ true -> ok
+ end,
+ %% If the overall alarm state has changed, inform the locals.
+ case {BeforeSz, AfterSz} of
+ {0, 1} -> ok = alert_local(true, Alertees);
+ {1, 0} -> ok = alert_local(false, Alertees);
+ {_, _} -> ok
+ end,
State#alarms{alarmed_nodes = AN1}.
-maybe_alert(BeforeSize, AfterSize, Alertees, AlmNde) ->
- ok = maybe_alert_remote(BeforeSize, AfterSize, Alertees, AlmNde =:= node()),
- ok = maybe_alert_local(BeforeSize, AfterSize, Alertees).
+alert_local(Alert, Alertees) -> alert(Alert, Alertees, fun erlang:'=:='/2).
-%% If we have changed our alarm state, always inform the remotes.
-maybe_alert_remote(BeforeSize, AfterSize, Alertees, true)
- when BeforeSize < AfterSize -> alert_remote(true, Alertees);
-maybe_alert_remote(BeforeSize, AfterSize, Alertees, true)
- when BeforeSize > AfterSize -> alert_remote(false, Alertees);
-maybe_alert_remote(_BeforeSize, _AfterSize, _Alertees, _IsLocalNode) ->
- ok.
-
-%% If the overall alarm state has changed, inform the locals.
-maybe_alert_local(0, 1, Alertees) -> alert_local(true, Alertees);
-maybe_alert_local(1, 0, Alertees) -> alert_local(false, Alertees);
-maybe_alert_local(_, _, _Alertees) -> ok.
-
-alert_local(Alert, Alertees) ->
- alert(Alert, Alertees, fun erlang:'=:='/2).
-
-alert_remote(Alert, Alertees) ->
- alert(Alert, Alertees, fun erlang:'=/='/2).
+alert_remote(Alert, Alertees) -> alert(Alert, Alertees, fun erlang:'=/='/2).
alert(Alert, Alertees, NodeComparator) ->
Node = node(),