@@ -259,11 +259,14 @@ start_cluster(Q) ->
259259 NewQ1 = amqqueue :set_type_state (NewQ0 ,
260260 #{nodes => [LeaderNode | FollowerNodes ]}),
261261
262+ Versions = erpc :multicall (FollowerNodes , rabbit_fifo , version , []),
263+ MinVersion = lists :min ([rabbit_fifo :version () | Versions ]),
264+
262265 rabbit_log :debug (" Will start up to ~w replicas for quorum ~ts with leader on node '~ts '" ,
263266 [QuorumSize , rabbit_misc :rs (QName ), LeaderNode ]),
264267 case rabbit_amqqueue :internal_declare (NewQ1 , false ) of
265268 {created , NewQ } ->
266- RaConfs = [make_ra_conf (NewQ , ServerId )
269+ RaConfs = [make_ra_conf (NewQ , ServerId , voter , MinVersion )
267270 || ServerId <- members (NewQ )],
268271
269272 % % khepri projections on remote nodes are eventually consistent
@@ -1339,7 +1342,9 @@ add_member(Q, Node, Membership, Timeout) when ?amqqueue_is_quorum(Q) ->
13391342 % % TODO parallel calls might crash this, or add a duplicate in quorum_nodes
13401343 ServerId = {RaName , Node },
13411344 Members = members (Q ),
1342- Conf = make_ra_conf (Q , ServerId , Membership ),
1345+
1346+ MachineVersion = erpc :call (Node , rabbit_fifo , version , []),
1347+ Conf = make_ra_conf (Q , ServerId , Membership , MachineVersion ),
13431348 case ra :start_server (? RA_SYSTEM , Conf ) of
13441349 ok ->
13451350 ServerIdSpec =
@@ -1912,9 +1917,9 @@ format_ra_event(ServerId, Evt, QRef) ->
19121917 {'$gen_cast' , {queue_event , QRef , {ServerId , Evt }}}.
19131918
19141919make_ra_conf (Q , ServerId ) ->
1915- make_ra_conf (Q , ServerId , voter ).
1920+ make_ra_conf (Q , ServerId , voter , rabbit_fifo : version () ).
19161921
1917- make_ra_conf (Q , ServerId , Membership ) ->
1922+ make_ra_conf (Q , ServerId , Membership , MacVersion ) ->
19181923 TickTimeout = application :get_env (rabbit , quorum_tick_interval ,
19191924 ? TICK_INTERVAL ),
19201925 SnapshotInterval = application :get_env (rabbit , quorum_snapshot_interval ,
@@ -1923,10 +1928,12 @@ make_ra_conf(Q, ServerId, Membership) ->
19231928 quorum_min_checkpoint_interval ,
19241929 ? MIN_CHECKPOINT_INTERVAL ),
19251930 make_ra_conf (Q , ServerId , TickTimeout ,
1926- SnapshotInterval , CheckpointInterval , Membership ).
1931+ SnapshotInterval , CheckpointInterval ,
1932+ Membership , MacVersion ).
19271933
19281934make_ra_conf (Q , ServerId , TickTimeout ,
1929- SnapshotInterval , CheckpointInterval , Membership ) ->
1935+ SnapshotInterval , CheckpointInterval ,
1936+ Membership , MacVersion ) ->
19301937 QName = amqqueue :get_name (Q ),
19311938 RaMachine = ra_machine (Q ),
19321939 [{ClusterName , _ } | _ ] = Members = members (Q ),
@@ -1947,6 +1954,7 @@ make_ra_conf(Q, ServerId, TickTimeout,
19471954 log_init_args => LogCfg ,
19481955 tick_timeout => TickTimeout ,
19491956 machine => RaMachine ,
1957+ initial_machine_version => MacVersion ,
19501958 ra_event_formatter => Formatter }).
19511959
19521960make_mutable_config (Q ) ->
0 commit comments