From febcdbb1b814675e82f941dd29da7f5760203978 Mon Sep 17 00:00:00 2001 From: Deeksha Date: Fri, 8 Aug 2025 10:28:17 -0700 Subject: [PATCH 1/5] Add config option for enabling local_random_exchange --- deps/rabbit/priv/schema/rabbit.schema | 6 +++++ .../src/rabbit_exchange_type_local_random.erl | 5 ++-- .../rabbit_local_random_exchange_SUITE.erl | 27 ++++++++++++++++++- 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index f5b79370fcd6..1192febea41d 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -2592,7 +2592,13 @@ fun(Conf) -> end end}. +%% Enable or disable local random exchange +%% +%% {enable_local_random_exchange, false}, +{mapping, "enable_local_random_exchange", "rabbit.enable_local_random_exchange", [ + {datatype, {enum, [true, false]}} +]}. %% %% Backing queue version diff --git a/deps/rabbit/src/rabbit_exchange_type_local_random.erl b/deps/rabbit/src/rabbit_exchange_type_local_random.erl index db9b37475fdc..b7875cb300ed 100644 --- a/deps/rabbit/src/rabbit_exchange_type_local_random.erl +++ b/deps/rabbit/src/rabbit_exchange_type_local_random.erl @@ -58,11 +58,12 @@ info(_X) -> []. info(_X, _) -> []. serialise_events() -> false. validate(_X) -> - case rabbit_feature_flags:is_enabled(?MODULE) of + case rabbit_feature_flags:is_enabled(?MODULE) andalso + rabbit_misc:get_env(rabbit, enable_local_random_exchange, true) of true -> ok; false -> - rabbit_misc:amqp_error( + rabbit_misc:protocol_error( precondition_failed, "x-local-random exchange feature not available", [], 'exchange.declare') diff --git a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl index a51eec8797a4..fcc1a9232bca 100644 --- a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl +++ b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl @@ -21,7 +21,8 @@ groups() -> [ {non_parallel_tests, [], [ routed_to_one_local_queue_test, - no_route + no_route, + enable_local_random_exchange_config_test ]} ]. @@ -196,6 +197,30 @@ make_queue_name(Config, Node) -> B = rabbit_ct_helpers:get_config(Config, test_resource_name), erlang:list_to_binary("q-" ++ B ++ "-" ++ integer_to_list(Node)). +enable_local_random_exchange_config_test(Config) -> + E = make_exchange_name(Config, "config-test"), + + %% Disable the config flag + rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env, + [rabbit, enable_local_random_exchange, false]), + + %% Try to create exchange - should fail + ?assertExit({{shutdown, {server_initiated_close, 406, _}}, _}, + declare_exchange(Config, E)), + + %% Re-enable the config flag + rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env, + [rabbit, enable_local_random_exchange, true]), + + %% Now exchange creation should succeed + declare_exchange(Config, E), + + %% Clean up + run_on_node(Config, 0, + fun(Chan) -> + amqp_channel:call(Chan, #'exchange.delete'{exchange = E}) + end). + flush(T) -> receive X -> ct:pal("flushed ~p", [X]), From 8a323b18884cd2eb03cf2dbd252c65ec1a338c53 Mon Sep 17 00:00:00 2001 From: Deeksha Date: Fri, 8 Aug 2025 10:28:17 -0700 Subject: [PATCH 2/5] Add config option for enabling local_random_exchange --- deps/rabbit/priv/schema/rabbit.schema | 4 ++-- .../src/rabbit_exchange_type_local_random.erl | 14 +++++++++++--- .../test/rabbit_local_random_exchange_SUITE.erl | 6 ++++-- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index 1192febea41d..b945e0f98446 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -2594,9 +2594,9 @@ end}. %% Enable or disable local random exchange %% -%% {enable_local_random_exchange, false}, +%% {exchange_types.local_random.enabled, false}, -{mapping, "enable_local_random_exchange", "rabbit.enable_local_random_exchange", [ +{mapping, "exchange_types.local_random.enabled", "rabbit.local_random_exchange_enabled", [ {datatype, {enum, [true, false]}} ]}. diff --git a/deps/rabbit/src/rabbit_exchange_type_local_random.erl b/deps/rabbit/src/rabbit_exchange_type_local_random.erl index b7875cb300ed..f9e2bd65f651 100644 --- a/deps/rabbit/src/rabbit_exchange_type_local_random.erl +++ b/deps/rabbit/src/rabbit_exchange_type_local_random.erl @@ -59,13 +59,21 @@ info(_X, _) -> []. serialise_events() -> false. validate(_X) -> case rabbit_feature_flags:is_enabled(?MODULE) andalso - rabbit_misc:get_env(rabbit, enable_local_random_exchange, true) of + rabbit_misc:get_env(rabbit, enable_local_random_exchange, false) of true -> - ok; + case application:get_env(rabbit, local_random_exchange_enabled, true) of + true -> + ok; + false -> + rabbit_misc:protocol_error( + precondition_failed, + "x-local-random exchange is disabled by configuration", [], + 'exchange.declare') + end; false -> rabbit_misc:protocol_error( precondition_failed, - "x-local-random exchange feature not available", [], + "x-local-random exchange feature flag is disabled", [], 'exchange.declare') end. diff --git a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl index fcc1a9232bca..4472c1ae8cde 100644 --- a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl +++ b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl @@ -23,6 +23,8 @@ groups() -> routed_to_one_local_queue_test, no_route, enable_local_random_exchange_config_test + no_route, + enable_local_random_exchange_config_test ]} ]. @@ -202,7 +204,7 @@ enable_local_random_exchange_config_test(Config) -> %% Disable the config flag rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env, - [rabbit, enable_local_random_exchange, false]), + [rabbit, local_random_exchange_enabled, false]), %% Try to create exchange - should fail ?assertExit({{shutdown, {server_initiated_close, 406, _}}, _}, @@ -210,7 +212,7 @@ enable_local_random_exchange_config_test(Config) -> %% Re-enable the config flag rabbit_ct_broker_helpers:rpc(Config, 0, application, set_env, - [rabbit, enable_local_random_exchange, true]), + [rabbit, local_random_exchange_enabled, true]), %% Now exchange creation should succeed declare_exchange(Config, E), From 2afbc5eeb631e8c043ec1b7cfceff612dde69ea7 Mon Sep 17 00:00:00 2001 From: udeeksha30-netizen Date: Mon, 11 Aug 2025 07:47:08 -0700 Subject: [PATCH 3/5] Add config option for enabling local_random_exchange --- deps/rabbit/src/rabbit_exchange_type_local_random.erl | 2 +- deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/deps/rabbit/src/rabbit_exchange_type_local_random.erl b/deps/rabbit/src/rabbit_exchange_type_local_random.erl index f9e2bd65f651..49b7421853a7 100644 --- a/deps/rabbit/src/rabbit_exchange_type_local_random.erl +++ b/deps/rabbit/src/rabbit_exchange_type_local_random.erl @@ -59,7 +59,7 @@ info(_X, _) -> []. serialise_events() -> false. validate(_X) -> case rabbit_feature_flags:is_enabled(?MODULE) andalso - rabbit_misc:get_env(rabbit, enable_local_random_exchange, false) of + rabbit_misc:get_env(rabbit, enable_local_random_exchange, true) of true -> case application:get_env(rabbit, local_random_exchange_enabled, true) of true -> diff --git a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl index 4472c1ae8cde..25ff7d39c4d3 100644 --- a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl +++ b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl @@ -23,8 +23,6 @@ groups() -> routed_to_one_local_queue_test, no_route, enable_local_random_exchange_config_test - no_route, - enable_local_random_exchange_config_test ]} ]. From 93cffe72e0b425095474443b96bc2115116bb1ac Mon Sep 17 00:00:00 2001 From: udeeksha30-netizen Date: Mon, 11 Aug 2025 08:12:33 -0700 Subject: [PATCH 4/5] Removed extra comments --- deps/rabbit/priv/schema/rabbit.schema | 3 --- 1 file changed, 3 deletions(-) diff --git a/deps/rabbit/priv/schema/rabbit.schema b/deps/rabbit/priv/schema/rabbit.schema index b945e0f98446..03ae255344cb 100644 --- a/deps/rabbit/priv/schema/rabbit.schema +++ b/deps/rabbit/priv/schema/rabbit.schema @@ -2593,9 +2593,6 @@ fun(Conf) -> end}. %% Enable or disable local random exchange -%% -%% {exchange_types.local_random.enabled, false}, - {mapping, "exchange_types.local_random.enabled", "rabbit.local_random_exchange_enabled", [ {datatype, {enum, [true, false]}} ]}. From 781c14035ebee012bca03ac17ac62af2182e9c81 Mon Sep 17 00:00:00 2001 From: udeeksha30-netizen Date: Mon, 11 Aug 2025 09:51:20 -0700 Subject: [PATCH 5/5] Addressed requested changes --- deps/rabbit/src/rabbit_exchange_type_local_random.erl | 3 +-- deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/deps/rabbit/src/rabbit_exchange_type_local_random.erl b/deps/rabbit/src/rabbit_exchange_type_local_random.erl index 49b7421853a7..323216a84e27 100644 --- a/deps/rabbit/src/rabbit_exchange_type_local_random.erl +++ b/deps/rabbit/src/rabbit_exchange_type_local_random.erl @@ -58,8 +58,7 @@ info(_X) -> []. info(_X, _) -> []. serialise_events() -> false. validate(_X) -> - case rabbit_feature_flags:is_enabled(?MODULE) andalso - rabbit_misc:get_env(rabbit, enable_local_random_exchange, true) of + case rabbit_feature_flags:is_enabled(?MODULE) of true -> case application:get_env(rabbit, local_random_exchange_enabled, true) of true -> diff --git a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl index 25ff7d39c4d3..cf728690eb6e 100644 --- a/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl +++ b/deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl @@ -22,7 +22,7 @@ groups() -> {non_parallel_tests, [], [ routed_to_one_local_queue_test, no_route, - enable_local_random_exchange_config_test + disable_local_random_exchange_config_test ]} ]. @@ -197,7 +197,7 @@ make_queue_name(Config, Node) -> B = rabbit_ct_helpers:get_config(Config, test_resource_name), erlang:list_to_binary("q-" ++ B ++ "-" ++ integer_to_list(Node)). -enable_local_random_exchange_config_test(Config) -> +disable_local_random_exchange_config_test(Config) -> E = make_exchange_name(Config, "config-test"), %% Disable the config flag