summaryrefslogtreecommitdiff
path: root/src/gm.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-09-02 15:40:57 +0100
committerSimon MacMullen <simon@rabbitmq.com>2013-09-02 15:40:57 +0100
commit711cbbdbbd1d1748fa1971046a0b881c8b6fa6f1 (patch)
tree415946f1b80a77bc6d6e10df2cefca37faed85ed /src/gm.erl
parent33d7248feb0be93fea931958d3a9edd65d0f6077 (diff)
downloadrabbitmq-server-git-711cbbdbbd1d1748fa1971046a0b881c8b6fa6f1.tar.gz
Take GM's view of the live members each time we have a death message; don't assume the master will always be able to write updates to Mnesia.
Diffstat (limited to 'src/gm.erl')
-rw-r--r--src/gm.erl12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/gm.erl b/src/gm.erl
index 78099499f4..9046a11301 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -475,7 +475,7 @@
%% see members die that we have not seen born (or supplied in the
%% members to joined/2).
-callback members_changed(Args :: term(), Births :: [pid()],
- Deaths :: [pid()]) ->
+ Deaths :: [pid()], Current :: [pid()]) ->
ok | {stop, Reason :: term()} | {become, Module :: atom(), Args :: any()}.
%% Supplied with Args provided in start_link, the sender, and the
@@ -494,7 +494,7 @@
-else.
behaviour_info(callbacks) ->
- [{joined, 2}, {members_changed, 3}, {handle_msg, 3}, {terminate, 2}];
+ [{joined, 2}, {members_changed, 4}, {handle_msg, 3}, {terminate, 2}];
behaviour_info(_Other) ->
undefined.
@@ -678,7 +678,8 @@ handle_cast({validate_members, OldMembers},
Deaths = OldMembers -- NewMembers,
case {Births, Deaths} of
{[], []} -> noreply(State);
- _ -> Result = Module:members_changed(Args, Births, Deaths),
+ _ -> Result = Module:members_changed(
+ Args, Births, Deaths, NewMembers),
handle_callback_result({Result, State})
end;
@@ -1377,8 +1378,9 @@ callback_view_changed(Args, Module, OldView, NewView) ->
Deaths = OldMembers -- NewMembers,
case {Births, Deaths} of
{[], []} -> ok;
- _ -> Module:members_changed(Args, get_pids(Births),
- get_pids(Deaths))
+ _ -> Module:members_changed(
+ Args, get_pids(Births), get_pids(Deaths),
+ get_pids(NewMembers))
end.
handle_callback_result({Result, State}) ->