summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2014-04-23 11:26:57 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2014-04-23 11:26:57 +0100
commita198c3473eb137201054640f6713b5612501f1d5 (patch)
tree9aaeaa7e8bf07fe4d90735165eee5b9a5d9ac19f
parent7e4e9d797661ad391279dc37ea1ae3c6d316850a (diff)
downloadrabbitmq-server-bug26119.tar.gz
don't erase aliases quite so eagerly on DOWNbug26119
since that can result in completely forgetting about a member when there are still acks making their way around the right.
-rw-r--r--src/gm.erl17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/gm.erl b/src/gm.erl
index 5e9ed460..acc94447 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -709,15 +709,16 @@ handle_info({'DOWN', MRef, process, _Pid, Reason},
_ ->
View1 = group_to_view(record_dead_member_in_group(
Member, GroupName, TxnFun)),
- {Result, State1} = maybe_erase_aliases(State, View1),
handle_callback_result(
- {Result,
- case alive_view_members(View1) of
- [Self] -> State1 #state {
- members_state = blank_member_state(),
- confirms = purge_confirms(Confirms) };
- _ -> State1
- end})
+ case alive_view_members(View1) of
+ [Self] ->
+ {Result, State1} = maybe_erase_aliases(State, View1),
+ {Result, State1 #state {
+ members_state = blank_member_state(),
+ confirms = purge_confirms(Confirms) }};
+ _ ->
+ change_view(View1, State)
+ end)
end.