Skip to content

Commit 97634e9

Browse files
committed
Add rabbit_queue_type:is_enabled/1
This commits partially reverts 575f4e7 Function `rabbit_queue_type:is_enabled/1` seems to be useful for future queue types. See #7269 (comment)
1 parent 5a8e74e commit 97634e9

File tree

7 files changed

+45
-13
lines changed

7 files changed

+45
-13
lines changed

deps/rabbit/src/rabbit_amqqueue.erl

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -217,16 +217,24 @@ declare(QueueName = #resource{virtual_host = VHost}, Durable, AutoDelete, Args,
217217
Owner, ActingUser, Node) ->
218218
ok = check_declare_arguments(QueueName, Args),
219219
Type = get_queue_type(Args),
220-
Q = amqqueue:new(QueueName,
221-
none,
222-
Durable,
223-
AutoDelete,
224-
Owner,
225-
Args,
226-
VHost,
227-
#{user => ActingUser},
228-
Type),
229-
rabbit_queue_type:declare(Q, Node).
220+
case rabbit_queue_type:is_enabled(Type) of
221+
true ->
222+
Q = amqqueue:new(QueueName,
223+
none,
224+
Durable,
225+
AutoDelete,
226+
Owner,
227+
Args,
228+
VHost,
229+
#{user => ActingUser},
230+
Type),
231+
rabbit_queue_type:declare(Q, Node);
232+
false ->
233+
{protocol_error, internal_error,
234+
"Cannot declare a queue '~ts' of type '~ts' on node '~ts': "
235+
"the corresponding feature flag is disabled",
236+
[rabbit_misc:rs(QueueName), Type, Node]}
237+
end.
230238

231239
get_queue_type(Args) ->
232240
case rabbit_misc:table_lookup(Args, <<"x-queue-type">>) of

deps/rabbit/src/rabbit_classic_queue.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
-export_type([state/0]).
2424

2525
-export([
26+
is_enabled/0,
2627
is_compatible/3,
2728
declare/2,
2829
delete/4,
@@ -58,6 +59,9 @@
5859
send_drained/3,
5960
send_credit_reply/3]).
6061

62+
-spec is_enabled() -> boolean().
63+
is_enabled() -> true.
64+
6165
-spec is_compatible(boolean(), boolean(), boolean()) -> boolean().
6266
is_compatible(_, _, _) ->
6367
true.

deps/rabbit/src/rabbit_queue_type.erl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
discover/1,
1616
feature_flag_name/1,
1717
default/0,
18+
is_enabled/1,
1819
is_compatible/4,
1920
declare/2,
2021
delete/4,
@@ -115,6 +116,8 @@
115116
actions/0,
116117
settle_op/0]).
117118

119+
-callback is_enabled() -> boolean().
120+
118121
-callback is_compatible(Durable :: boolean(),
119122
Exclusive :: boolean(),
120123
AutoDelete :: boolean()) ->
@@ -234,6 +237,11 @@ feature_flag_name(_) ->
234237
default() ->
235238
rabbit_classic_queue.
236239

240+
%% is a specific queue type implementation enabled
241+
-spec is_enabled(module()) -> boolean().
242+
is_enabled(Type) ->
243+
Type:is_enabled().
244+
237245
-spec is_compatible(module(), boolean(), boolean(), boolean()) ->
238246
boolean().
239247
is_compatible(Type, Durable, Exclusive, AutoDelete) ->

deps/rabbit/src/rabbit_quorum_queue.erl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@
6161
notify_decorators/3,
6262
spawn_notify_decorators/3]).
6363

64-
-export([is_compatible/3,
64+
-export([is_enabled/0,
65+
is_compatible/3,
6566
declare/2,
6667
is_stateful/0]).
6768

@@ -112,6 +113,9 @@
112113

113114
%%----------- rabbit_queue_type ---------------------------------------------
114115

116+
-spec is_enabled() -> boolean().
117+
is_enabled() -> true.
118+
115119
-spec is_compatible(boolean(), boolean(), boolean()) -> boolean().
116120
is_compatible(_Durable = true,
117121
_Exclusive = false,

deps/rabbit/src/rabbit_stream_queue.erl

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99

1010
-behaviour(rabbit_queue_type).
1111

12-
-export([is_compatible/3,
12+
-export([is_enabled/0,
13+
is_compatible/3,
1314
declare/2,
1415
delete/4,
1516
purge/1,
@@ -89,6 +90,9 @@
8990

9091
-type client() :: #stream_client{}.
9192

93+
-spec is_enabled() -> boolean().
94+
is_enabled() -> true.
95+
9296
-spec is_compatible(boolean(), boolean(), boolean()) -> boolean().
9397
is_compatible(_Durable = true,
9498
_Exclusive = false,

deps/rabbitmq_mqtt/src/rabbit_mqtt_processor.erl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -980,7 +980,7 @@ queue_args(_, _) ->
980980
[].
981981

982982
queue_type(?QOS_0, true, QArgs) ->
983-
case rabbit_feature_flags:is_enabled(?QUEUE_TYPE_QOS_0) of
983+
case rabbit_queue_type:is_enabled(?QUEUE_TYPE_QOS_0) of
984984
true ->
985985
?QUEUE_TYPE_QOS_0;
986986
false ->

deps/rabbitmq_mqtt/src/rabbit_mqtt_qos0_queue.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
declare/2,
2929
delete/4,
3030
deliver/2,
31+
is_enabled/0,
3132
is_compatible/3,
3233
is_recoverable/1,
3334
recover/2,
@@ -133,6 +134,9 @@ deliver(Qs, #delivery{message = BasicMessage,
133134
delegate:invoke_no_result(Pids, {gen_server, cast, [Msg]}),
134135
{[], Actions}.
135136

137+
-spec is_enabled() -> boolean().
138+
is_enabled() -> rabbit_feature_flags:is_enabled(?MODULE).
139+
136140
-spec is_compatible(boolean(), boolean(), boolean()) ->
137141
boolean().
138142
is_compatible(_Durable = true, _Exclusive = true, _AutoDelete = false) ->

0 commit comments

Comments
 (0)