You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
NOTE: RabbitMQ does not support OTP26 yet. This issue should not affect any users.
When performing a rolling upgrade from OTP25 to OTP26, the first node running OTP26 to re-join the cluster will not be able to accept Ra snapshots:
** Reason for termination = error:{badmatch,1522447362}
** Callback modules = [ra_server_proc]
** Callback mode = [state_functions,state_enter]
** Stacktrace =
** [{ra_log_snapshot,complete_accept,2,
[{file,"ra_log_snapshot.erl"},{line,85}]},
{ra_snapshot,accept_chunk,4,[{file,"ra_snapshot.erl"},{line,281}]},
{ra_server,handle_receive_snapshot,2,
[{file,"ra_server.erl"},{line,1227}]},
{ra_server_proc,handle_receive_snapshot,2,
[{file,"ra_server_proc.erl"},{line,1052}]},
{ra_server_proc,receive_snapshot,3,
[{file,"ra_server_proc.erl"},{line,805}]},
{gen_statem,loop_state_callback,11,[{file,"gen_statem.erl"},{line,1377}]},
{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,241}]}]
** Time-outs: {2,
[{state_timeout,receive_snapshot_timeout},
{{timeout,tick},tick_timeout}]}
** Client <18278.7917.0> is remote on node 'rabbit@qq-s1000-server-0.qq-s1000-nodes.qq'
crasher:
initial call: ra_server_proc:init/1
pid: <0.632.0>
registered_name: '%2F_fivers-8'
exception error: no match of right hand side value 1522447362
in function ra_log_snapshot:complete_accept/2 (ra_log_snapshot.erl, line 85)
in call from ra_snapshot:accept_chunk/4 (ra_snapshot.erl, line 281)
in call from ra_server:handle_receive_snapshot/2 (ra_server.erl, line 1227)
in call from ra_server_proc:handle_receive_snapshot/2 (ra_server_proc.erl, line 1052)
in call from ra_server_proc:receive_snapshot/3 (ra_server_proc.erl, line 805)
in call from gen_statem:loop_state_callback/11 (gen_statem.erl, line 1377)
The problem is caused by different map ordering in OTP26. Ra snapshot metadata is a map that is later serialized with term_to_binary and is a part of data that the checksum is calculated on. Due to different map ordering, with OTP26 the elements of the map are written in a different order and therefore lead to a different checksum.
Describe the bug
NOTE: RabbitMQ does not support OTP26 yet. This issue should not affect any users.
When performing a rolling upgrade from OTP25 to OTP26, the first node running OTP26 to re-join the cluster will not be able to accept Ra snapshots:
Full log file:
upgrade.log.gz
Reproduction steps
main
branch or3.11
, I will usemain
)perf-test -x 10 -y 10 -r 5000 -c 500 -qp fivers-%d -qpf 1 -qpt 10 -qa x-max-length=1000000
)Expected behavior
Successful upgrade :)
Additional context
No response
The text was updated successfully, but these errors were encountered: