Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion deps/rabbit/priv/schema/rabbit.schema
Original file line number Diff line number Diff line change
Expand Up @@ -2592,7 +2592,10 @@ fun(Conf) ->
end
end}.


%% Enable or disable local random exchange
{mapping, "exchange_types.local_random.enabled", "rabbit.local_random_exchange_enabled", [
{datatype, {enum, [true, false]}}
]}.

%%
%% Backing queue version
Expand Down
17 changes: 13 additions & 4 deletions deps/rabbit/src/rabbit_exchange_type_local_random.erl
Original file line number Diff line number Diff line change
Expand Up @@ -58,13 +58,22 @@ 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;
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:amqp_error(
rabbit_misc:protocol_error(
precondition_failed,
"x-local-random exchange feature not available", [],
"x-local-random exchange feature flag is disabled", [],
'exchange.declare')
end.

Expand Down
27 changes: 26 additions & 1 deletion deps/rabbit/test/rabbit_local_random_exchange_SUITE.erl
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,8 @@ groups() ->
[
{non_parallel_tests, [], [
routed_to_one_local_queue_test,
no_route
no_route,
enable_local_random_exchange_config_test
]}
].

Expand Down Expand Up @@ -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, local_random_exchange_enabled, 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, local_random_exchange_enabled, 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]),
Expand Down
Loading