diff options
| author | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2016-11-24 12:00:42 +0100 |
|---|---|---|
| committer | Jean-Sébastien Pédron <jean-sebastien@rabbitmq.com> | 2016-11-24 12:00:42 +0100 |
| commit | bfd14dd7ff1a7eb28c00a44d5d52887f42cd603d (patch) | |
| tree | c3aa531499314917188806a073ef2fde590f4c1e /src/gm.erl | |
| parent | 1bd0fa11a08e311718d0c0162ab38aa646068790 (diff) | |
| parent | beb8e52c3648c06340c4c1d6b573a2570d4ee0dd (diff) | |
| download | rabbitmq-server-git-bfd14dd7ff1a7eb28c00a44d5d52887f42cd603d.tar.gz | |
Merge branch 'stable' into rabbitmq-management-236
Diffstat (limited to 'src/gm.erl')
| -rw-r--r-- | src/gm.erl | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/src/gm.erl b/src/gm.erl index 74e19ee6fd..41aa01f04d 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -1175,11 +1175,20 @@ record_new_member_in_group(NewMember, Left, GroupName, TxnFun) -> try Group = #gm_group { members = Members, version = Ver } = check_membership(Left, read_group(GroupName)), - {Prefix, [Left | Suffix]} = - lists:splitwith(fun (M) -> M =/= Left end, Members), - write_group(Group #gm_group { - members = Prefix ++ [Left, NewMember | Suffix], - version = Ver + 1 }) + case lists:member(NewMember, Members) of + true -> + %% This avois duplicates during partial partitions, + %% as inconsistent views might happen during them + rabbit_log:warning("(~p) GM avoiding duplicate of ~p", + [self(), NewMember]), + Group; + false -> + {Prefix, [Left | Suffix]} = + lists:splitwith(fun (M) -> M =/= Left end, Members), + write_group(Group #gm_group { + members = Prefix ++ [Left, NewMember | Suffix], + version = Ver + 1 }) + end catch lost_membership -> %% The transaction must not be abruptly crashed, but |
