@@ -441,8 +441,22 @@ start_rabbitmq_node(Master, Config, NodeConfig, I) ->
441441 {failed_boot_attempts , Attempts + 1 }),
442442 start_rabbitmq_node (Master , Config , NodeConfig5 , I );
443443 NodeConfig4 ->
444- Master ! {self (), I , NodeConfig4 },
445- unlink (Master )
444+ case uses_expected_metadata_store (Config , NodeConfig4 ) of
445+ {MetadataStore , MetadataStore } ->
446+ Master ! {self (), I , NodeConfig4 },
447+ unlink (Master );
448+ {ExpectedMetadataStore , UsedMetadataStore } ->
449+ stop_rabbitmq_node (Config , NodeConfig4 ),
450+ Nodename = ? config (nodename , NodeConfig4 ),
451+ Error = {skip ,
452+ rabbit_misc :format (
453+ " Node ~s is using the ~s metadata store, "
454+ " ~s was expected" ,
455+ [Nodename , UsedMetadataStore ,
456+ ExpectedMetadataStore ])},
457+ Master ! {self (), Error },
458+ unlink (Master )
459+ end
446460 end .
447461
448462run_node_steps (Config , NodeConfig , I , [Step | Rest ]) ->
@@ -883,6 +897,45 @@ query_node(Config, NodeConfig) ->
883897 cover_add_node (Nodename ),
884898 rabbit_ct_helpers :set_config (NodeConfig , Vars ).
885899
900+ uses_expected_metadata_store (Config , NodeConfig ) ->
901+ Nodename = ? config (nodename , NodeConfig ),
902+ ExpectedMetadataStore = rabbit_ct_helpers :get_config (
903+ Config , metadata_store ),
904+ case ExpectedMetadataStore of
905+ mnesia -> ok ;
906+ khepri -> maybe_enable_khepri_as_expected (Config , Nodename )
907+ end ,
908+ IsKhepriEnabled = rpc (Config , Nodename , rabbit_khepri , is_enabled , []),
909+ UsedMetadataStore = case IsKhepriEnabled of
910+ true -> khepri ;
911+ false -> mnesia
912+ end ,
913+ ct :pal (
914+ " Metadata store on ~s : expected=~s , used=~s " ,
915+ [Nodename , UsedMetadataStore , ExpectedMetadataStore ]),
916+ {ExpectedMetadataStore , UsedMetadataStore }.
917+
918+ maybe_enable_khepri_as_expected (Config , Nodename ) ->
919+ RelativeForcedFeatureFlagsUnsupported = (
920+ rpc (Config , Nodename ,
921+ erlang , function_exported ,
922+ [rabbit_feature_flags , get_require_level , 1 ])
923+ ),
924+ case RelativeForcedFeatureFlagsUnsupported of
925+ true ->
926+ ok ;
927+ false ->
928+ ct :pal (
929+ " Relative forced feature flags unsupported on ~s , "
930+ " enable Khepri now" ,
931+ [Nodename ]),
932+ Ret = enable_feature_flag (Config , [Nodename ], khepri_db ),
933+ ct :pal (
934+ " Tried to enable Khepri on ~s as expected: ~0p " ,
935+ [Nodename , Ret ]),
936+ ok
937+ end .
938+
886939maybe_cluster_nodes (Config ) ->
887940 Clustered0 = rabbit_ct_helpers :get_config (Config , rmq_nodes_clustered ),
888941 Clustered = case Clustered0 of
@@ -1013,19 +1066,22 @@ configure_metadata_store(Config) ->
10131066 ct :log (" Configuring metadata store..." ),
10141067 Value = rabbit_ct_helpers :get_app_env (
10151068 Config , rabbit , forced_feature_flags_on_init , undefined ),
1016- case configured_metadata_store (Config ) of
1069+ MetadataStore = configured_metadata_store (Config ),
1070+ Config1 = rabbit_ct_helpers :set_config (
1071+ Config , {metadata_store , MetadataStore }),
1072+ case MetadataStore of
10171073 khepri ->
10181074 ct :log (" Enabling Khepri metadata store" ),
10191075 case Value of
10201076 undefined ->
10211077 rabbit_ct_helpers :merge_app_env (
1022- Config ,
1078+ Config1 ,
10231079 {rabbit ,
10241080 [{forced_feature_flags_on_init ,
10251081 {rel , [khepri_db ], []}}]});
10261082 _ ->
10271083 rabbit_ct_helpers :merge_app_env (
1028- Config ,
1084+ Config1 ,
10291085 {rabbit ,
10301086 [{forced_feature_flags_on_init ,
10311087 [khepri_db | Value ]}]})
@@ -1035,13 +1091,13 @@ configure_metadata_store(Config) ->
10351091 case Value of
10361092 undefined ->
10371093 rabbit_ct_helpers :merge_app_env (
1038- Config ,
1094+ Config1 ,
10391095 {rabbit ,
10401096 [{forced_feature_flags_on_init ,
10411097 {rel , [], [khepri_db ]}}]});
10421098 _ ->
10431099 rabbit_ct_helpers :merge_app_env (
1044- Config ,
1100+ Config1 ,
10451101 {rabbit ,
10461102 [{forced_feature_flags_on_init ,
10471103 Value -- [khepri_db ]}]})
0 commit comments