summaryrefslogtreecommitdiff
path: root/src/gm.erl
diff options
context:
space:
mode:
authorDiana Corbacho <diana.corbacho@erlang-solutions.com>2016-04-28 18:09:01 +0100
committerDiana Corbacho <diana.corbacho@erlang-solutions.com>2016-04-28 18:09:01 +0100
commit6f11f14d183050b8804c0adf304bf7468586296e (patch)
tree5f7bbbc6e1efac23d079c8f95473116c82c86b12 /src/gm.erl
parent5b5d9b983b90d4840d7dc791449536e5448e6e62 (diff)
downloadrabbitmq-server-git-6f11f14d183050b8804c0adf304bf7468586296e.tar.gz
Drop ACKs of messages from lost members of the ring
* when partial partitions happen, inconsistent views can take place where both nodes in partial partition see the live node as their left (A -> C and B -> C), and override each other view in mnesia. Thus, when C tries to compare the ACKs finds missing elements on A or B data. We'll drop these as they won't be answered because the origin node is going into pause_minority and stops.
Diffstat (limited to 'src/gm.erl')
-rw-r--r--src/gm.erl6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/gm.erl b/src/gm.erl
index 199cf7c4de..1e4168c0e6 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -1338,7 +1338,11 @@ find_common(A, B, Common) ->
{{{value, Val}, A1}, {{value, Val}, B1}} ->
find_common(A1, B1, queue:in(Val, Common));
{{empty, _A}, _} ->
- {Common, B}
+ {Common, B};
+ {_, {_, B1}} ->
+ find_common(A, B1, Common);
+ {{_, A1}, _} ->
+ find_common(A1, B, Common)
end.