From a528a415d34d42ac02ea7b9ee87ed66da5b06020 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Thu, 7 Nov 2024 12:10:41 +0100 Subject: [PATCH 1/3] Khepri: Mark `khepri_db` as stable [Why] The intent is to have it stable and enabled by default for new deployment in RabbitMQ 4.1.x. To prepare for this goal, it is time to mark the feature flag as stable to let us iron out the library and its integration into RabbitMQ. This is not a commitment at this stage: we will revisit this near the beginning of the release cycle and commit to it or revert to experimental. --- deps/rabbit/src/rabbit_core_ff.erl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/deps/rabbit/src/rabbit_core_ff.erl b/deps/rabbit/src/rabbit_core_ff.erl index e8817e1751ac..fc255f6a4b0b 100644 --- a/deps/rabbit/src/rabbit_core_ff.erl +++ b/deps/rabbit/src/rabbit_core_ff.erl @@ -148,8 +148,7 @@ {khepri_db, #{desc => "New Raft-based metadata store.", doc_url => "https://www.rabbitmq.com/docs/next/metadata-store", - stability => experimental, - experiment_level => supported, + stability => stable, depends_on => [feature_flags_v2, direct_exchange_routing_v2, maintenance_mode_status, From 0541996b30b9703085c1cab3282510d471c0f10e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Wed, 13 Nov 2024 12:08:50 +0100 Subject: [PATCH 2/3] rabbitmq_4_0_deprecations_SUITE: Add more assertions to ram node tests --- .../test/rabbitmq_4_0_deprecations_SUITE.erl | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl b/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl index 0ee0a53e363c..ba5cc5a49880 100644 --- a/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl +++ b/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl @@ -296,6 +296,11 @@ join_when_ram_node_type_is_permitted_by_default_khepri(Config) -> [NodeA, NodeB] = rabbit_ct_broker_helpers:get_node_configs( Config, nodename), + IsPermitted = rabbit_ct_broker_helpers:rpc( + Config, NodeA, + rabbit_deprecated_features, is_permitted, + [ram_node_type]), + ok = rabbit_control_helper:command(stop_app, NodeA), ?assertMatch( {error, 70, @@ -305,6 +310,12 @@ join_when_ram_node_type_is_permitted_by_default_khepri(Config) -> [atom_to_list(NodeB)], [{"--ram", true}])), ok = rabbit_control_helper:command(start_app, NodeA), + ?assertEqual( + IsPermitted, + rabbit_ct_broker_helpers:rpc( + Config, NodeA, + rabbit_deprecated_features, is_permitted, [ram_node_type])), + ?assertEqual([NodeA], get_all_nodes(Config, NodeA)), ?assertEqual([NodeB], get_all_nodes(Config, NodeB)), ?assertEqual([NodeA], get_disc_nodes(Config, NodeA)), @@ -357,6 +368,11 @@ join_when_ram_node_type_is_not_permitted_from_conf_khepri(Config) -> [NodeA, NodeB] = rabbit_ct_broker_helpers:get_node_configs( Config, nodename), + IsPermitted = rabbit_ct_broker_helpers:rpc( + Config, NodeA, + rabbit_deprecated_features, is_permitted, + [ram_node_type]), + ok = rabbit_control_helper:command(stop_app, NodeA), ?assertMatch( {error, 70, @@ -366,6 +382,12 @@ join_when_ram_node_type_is_not_permitted_from_conf_khepri(Config) -> [atom_to_list(NodeB)], [{"--ram", true}])), ok = rabbit_control_helper:command(start_app, NodeA), + ?assertEqual( + IsPermitted, + rabbit_ct_broker_helpers:rpc( + Config, NodeA, + rabbit_deprecated_features, is_permitted, [ram_node_type])), + ?assertEqual([NodeA], get_all_nodes(Config, NodeA)), ?assertEqual([NodeB], get_all_nodes(Config, NodeB)), ?assertEqual([NodeA], get_disc_nodes(Config, NodeA)), From a34ce08f8fcd53a350ad64b9842e8ec232bcd11f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20P=C3=A9dron?= Date: Wed, 9 Apr 2025 15:16:16 +0200 Subject: [PATCH 3/3] rabbitmq_cli: Adapt `force_reset_command_test.exs` testsuites [Why] `force_reset` is unsupported with Khepri. --- .../test/ctl/force_reset_command_test.exs | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/deps/rabbitmq_cli/test/ctl/force_reset_command_test.exs b/deps/rabbitmq_cli/test/ctl/force_reset_command_test.exs index 9a26f90f53fe..50048ad61f69 100644 --- a/deps/rabbitmq_cli/test/ctl/force_reset_command_test.exs +++ b/deps/rabbitmq_cli/test/ctl/force_reset_command_test.exs @@ -31,14 +31,23 @@ defmodule ForceResetCommandTest do end test "run: force reset request to an active node with a stopped rabbit app succeeds", context do - add_vhost("some_vhost") - # ensure the vhost really does exist - assert vhost_exists?("some_vhost") - stop_rabbitmq_app() - assert :ok == @command.run([], context[:opts]) - start_rabbitmq_app() - # check that the created vhost no longer exists - assert match?([_], list_vhosts()) + node = get_rabbit_hostname() + case :rabbit_misc.rpc_call(node, :rabbit_khepri, :is_enabled, []) do + true -> + stop_rabbitmq_app() + assert {:error, ~c"Forced reset is unsupported with Khepri"} == @command.run([], context[:opts]) + start_rabbitmq_app() + + false -> + add_vhost("some_vhost") + # ensure the vhost really does exist + assert vhost_exists?("some_vhost") + stop_rabbitmq_app() + assert :ok == @command.run([], context[:opts]) + start_rabbitmq_app() + # check that the created vhost no longer exists + assert match?([_], list_vhosts()) + end end test "run: reset request to an active node with a running rabbit app fails", context do @@ -49,7 +58,7 @@ defmodule ForceResetCommandTest do case :rabbit_misc.rpc_call(node, :rabbit_khepri, :is_enabled, []) do true -> - assert match?({:error, :rabbitmq_unexpectedly_running}, ret) + assert match?({:error, ~c"Forced reset is unsupported with Khepri"}, ret) false -> assert match?({:error, :mnesia_unexpectedly_running}, ret)