@@ -433,6 +433,7 @@ start_rabbitmq_node(Master, Config, NodeConfig, I) ->
433433 % % It's unlikely we'll ever succeed to start RabbitMQ.
434434 Master ! {self (), Error },
435435 unlink (Master );
436+ % % @todo This might not work right now in at least some cases...
436437 {skip , _ } ->
437438 % % Try again with another TCP port numbers base.
438439 NodeConfig4 = move_nonworking_nodedir_away (NodeConfig3 ),
@@ -506,6 +507,7 @@ tcp_port_base_for_broker0(Config, I, PortsCount) ->
506507tcp_port_base_for_broker1 (Base , I , PortsCount ) ->
507508 Base + I * PortsCount * ? NODE_START_ATTEMPTS .
508509
510+ % % @todo Refactor to simplify this...
509511update_tcp_ports_in_rmq_config (NodeConfig , [tcp_port_amqp = Key | Rest ]) ->
510512 NodeConfig1 = rabbit_ct_helpers :merge_app_env (NodeConfig ,
511513 {rabbit , [{tcp_listeners , [? config (Key , NodeConfig )]}]}),
@@ -626,21 +628,52 @@ write_config_file(Config, NodeConfig, _I) ->
626628 ConfigFile ++ " \" : " ++ file :format_error (Reason )}
627629 end .
628630
631+ -define (REQUIRED_FEATURE_FLAGS , [
632+ % % Required in 3.11:
633+ " virtual_host_metadata,"
634+ " quorum_queue,"
635+ " implicit_default_bindings,"
636+ " maintenance_mode_status,"
637+ " user_limits,"
638+ % % Required in 3.12:
639+ " stream_queue,"
640+ " classic_queue_type_delivery_support,"
641+ " tracking_records_in_ets,"
642+ " stream_single_active_consumer,"
643+ " listener_records_in_ets,"
644+ " feature_flags_v2,"
645+ " direct_exchange_routing_v2,"
646+ " classic_mirrored_queue_version," % % @todo Missing in FF docs!!
647+ % % Required in 3.12 in rabbitmq_management_agent:
648+ % "drop_unroutable_metric,"
649+ % "empty_basic_get_metric,"
650+ % % Required in 4.0:
651+ " stream_sac_coordinator_unblock_group,"
652+ " restart_streams,"
653+ " stream_update_config_command,"
654+ " stream_filtering,"
655+ " message_containers" % % @todo Update FF docs!! It *is* required.
656+ ]).
657+
629658do_start_rabbitmq_node (Config , NodeConfig , I ) ->
630659 WithPlugins0 = rabbit_ct_helpers :get_config (Config ,
631- broker_with_plugins ),
660+ broker_with_plugins ), % % @todo This is probably not used.
632661 WithPlugins = case is_list (WithPlugins0 ) of
633662 true -> lists :nth (I + 1 , WithPlugins0 );
634663 false -> WithPlugins0
635664 end ,
636665 ForceUseSecondary = rabbit_ct_helpers :get_config (
637- Config , force_secondary_umbrella , undefined ),
666+ Config , force_secondary , undefined ),
638667 CanUseSecondary = case ForceUseSecondary of
639668 undefined ->
640669 (I + 1 ) rem 2 =:= 0 ;
641670 Override when is_boolean (Override ) ->
642671 Override
643672 end ,
673+ UseSecondaryDist = case ? config (secondary_dist , Config ) of
674+ false -> false ;
675+ _ -> CanUseSecondary
676+ end ,
644677 UseSecondaryUmbrella = case ? config (secondary_umbrella , Config ) of
645678 false -> false ;
646679 _ -> CanUseSecondary
@@ -686,8 +719,10 @@ do_start_rabbitmq_node(Config, NodeConfig, I) ->
686719 StartWithPluginsDisabled = rabbit_ct_helpers :get_config (
687720 Config , start_rmq_with_plugins_disabled ),
688721 ExtraArgs2 = case StartWithPluginsDisabled of
689- true -> [" LEAVE_PLUGINS_DISABLED=yes" | ExtraArgs1 ];
690- _ -> ExtraArgs1
722+ true ->
723+ [" LEAVE_PLUGINS_DISABLED=1" | ExtraArgs1 ];
724+ _ ->
725+ ExtraArgs1
691726 end ,
692727 KeepPidFile = rabbit_ct_helpers :get_config (
693728 Config , keep_pid_file_on_exit ),
@@ -731,7 +766,30 @@ do_start_rabbitmq_node(Config, NodeConfig, I) ->
731766 {" RABBITMQ_PLUGINS=~ts /rabbitmq-plugins" , [SecScriptsDir ]}
732767 | ExtraArgs4 ];
733768 false ->
734- ExtraArgs4
769+ case UseSecondaryDist of
770+ true ->
771+ SecondaryDist = ? config (secondary_dist , Config ),
772+ SecondaryEnabledPlugins = case {
773+ StartWithPluginsDisabled ,
774+ ? config (secondary_enabled_plugins , Config ),
775+ filename :basename (SrcDir )
776+ } of
777+ {true , _ , _ } -> " " ;
778+ {_ , undefined , " rabbit" } -> " " ;
779+ {_ , undefined , SrcPlugin } -> SrcPlugin ;
780+ {_ , SecondaryEnabledPlugins0 , _ } -> SecondaryEnabledPlugins0
781+ end ,
782+ [{" DIST_DIR=~ts /plugins" , [SecondaryDist ]},
783+ {" CLI_SCRIPTS_DIR=~ts /sbin" , [SecondaryDist ]},
784+ {" CLI_ESCRIPTS_DIR=~ts /escript" , [SecondaryDist ]},
785+ {" RABBITMQ_SCRIPTS_DIR=~ts /sbin" , [SecondaryDist ]},
786+ {" RABBITMQ_SERVER=~ts /sbin/rabbitmq-server" , [SecondaryDist ]},
787+ {" RABBITMQ_ENABLED_PLUGINS=~ts " , [SecondaryEnabledPlugins ]},
788+ {" RABBITMQ_FEATURE_FLAGS=~ts " , [? REQUIRED_FEATURE_FLAGS ]}
789+ | ExtraArgs4 ];
790+ false ->
791+ ExtraArgs4
792+ end
735793 end ,
736794 MakeVars = [
737795 {" RABBITMQ_NODENAME=~ts " , [Nodename ]},
@@ -1285,6 +1343,10 @@ rabbitmqctl(Config, Node, Args, Timeout) ->
12851343 CanUseSecondary = (I + 1 ) rem 2 =:= 0 ,
12861344 BazelRunSecCmd = rabbit_ct_helpers :get_config (
12871345 Config , rabbitmq_run_secondary_cmd ),
1346+ UseSecondaryDist = case ? config (secondary_dist , Config ) of
1347+ false -> false ;
1348+ _ -> CanUseSecondary
1349+ end ,
12881350 UseSecondaryUmbrella = case ? config (secondary_umbrella , Config ) of
12891351 false ->
12901352 case BazelRunSecCmd of
@@ -1327,7 +1389,14 @@ rabbitmqctl(Config, Node, Args, Timeout) ->
13271389 " rabbitmqctl" ])
13281390 end ;
13291391 false ->
1330- ? config (rabbitmqctl_cmd , Config )
1392+ case UseSecondaryDist of
1393+ true ->
1394+ SecondaryDist = ? config (secondary_dist , Config ),
1395+ rabbit_misc :format (
1396+ " ~ts /sbin/rabbitmqctl" , [SecondaryDist ]);
1397+ false ->
1398+ ? config (rabbitmqctl_cmd , Config )
1399+ end
13311400 end ,
13321401
13331402 NodeConfig = get_node_config (Config , Node ),
0 commit comments