diff options
author | tomyouyou <yxszyn@163.com> | 2022-01-06 17:39:38 +0800 |
---|---|---|
committer | Karl Nilsson <kjnilsson@gmail.com> | 2022-01-07 10:06:16 +0000 |
commit | e5ccf267ffda0ac9e79abae89a073a456e72312e (patch) | |
tree | 75e5a9bcfe8352b45736e7e2056fa79abc75fa73 | |
parent | 8e2edc76c288e04ae89fbd6996fd429be733b082 (diff) | |
download | rabbitmq-server-git-e5ccf267ffda0ac9e79abae89a073a456e72312e.tar.gz |
'rabbit_stream_coordinator:select_leader' runs with wrong comparison
The list consists of candidates which is a tuple {node, tail}, and the tail is made of {epoch, offset}.
While the 'select_leader' think the tail is made of {offset, epoch}.
Suppose there are two candidates:
[{node1,{1,100}},{node2,{2,99}}]
It selects node1 as the leader instead of node2 with larger epoch.
-rw-r--r-- | deps/rabbit/src/rabbit_stream_coordinator.erl | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/deps/rabbit/src/rabbit_stream_coordinator.erl b/deps/rabbit/src/rabbit_stream_coordinator.erl index f88822a54f..fd587e20cb 100644 --- a/deps/rabbit/src/rabbit_stream_coordinator.erl +++ b/deps/rabbit/src/rabbit_stream_coordinator.erl @@ -1528,9 +1528,9 @@ find_leader(Members) -> end. select_leader(Offsets) -> - [{Node, _} | _] = lists:sort(fun({_, {Ao, E}}, {_, {Bo, E}}) -> + [{Node, _} | _] = lists:sort(fun({_, {E, Ao}}, {_, {E, Bo}}) -> Ao >= Bo; - ({_, {_, Ae}}, {_, {_, Be}}) -> + ({_, {Ae, _}}, {_, {Be, _}}) -> Ae >= Be; ({_, empty}, _) -> false; |