Skip to content

Commit 90c8d0e

Browse files
committed
rabbit_feature_flags: Mark all 3.11.x feature flags as required
The main reason is that we want to have no migration functions at this point to make it easier to handle the Mnesia/Khepri migration. While here, mark all feature flags as required even those without a migration function to start from a clean slate after this. End users will have to upgrade to RabbitMQ 3.11.x or 3.12.x first before they can upgrade to whatever follows 3.12.x anyway.
1 parent de54251 commit 90c8d0e

File tree

1 file changed

+10
-142
lines changed

1 file changed

+10
-142
lines changed

deps/rabbit/src/rabbit_core_ff.erl

Lines changed: 10 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,10 @@
77

88
-module(rabbit_core_ff).
99

10-
-export([direct_exchange_routing_v2_enable/1,
11-
listener_records_in_ets_enable/1,
12-
listener_records_in_ets_post_enable/1,
13-
tracking_records_in_ets_enable/1,
14-
tracking_records_in_ets_post_enable/1]).
15-
1610
-rabbit_feature_flag(
1711
{classic_mirrored_queue_version,
1812
#{desc => "Support setting version for classic mirrored queues",
19-
stability => stable
13+
stability => required
2014
}}).
2115

2216
-rabbit_feature_flag(
@@ -30,7 +24,7 @@
3024
{stream_queue,
3125
#{desc => "Support queues of type `stream`",
3226
doc_url => "https://www.rabbitmq.com/stream.html",
33-
stability => stable,
27+
stability => required,
3428
depends_on => [quorum_queue]
3529
}}).
3630

@@ -63,7 +57,7 @@
6357
{stream_single_active_consumer,
6458
#{desc => "Single active consumer for streams",
6559
doc_url => "https://www.rabbitmq.com/stream.html",
66-
stability => stable,
60+
stability => required,
6761
depends_on => [stream_queue]
6862
}}).
6963

@@ -76,38 +70,29 @@
7670
-rabbit_feature_flag(
7771
{direct_exchange_routing_v2,
7872
#{desc => "v2 direct exchange routing implementation",
79-
stability => stable,
80-
depends_on => [feature_flags_v2, implicit_default_bindings],
81-
callbacks => #{enable => {?MODULE, direct_exchange_routing_v2_enable}}
73+
stability => required,
74+
depends_on => [feature_flags_v2, implicit_default_bindings]
8275
}}).
8376

8477
-rabbit_feature_flag(
8578
{listener_records_in_ets,
8679
#{desc => "Store listener records in ETS instead of Mnesia",
87-
stability => stable,
88-
depends_on => [feature_flags_v2],
89-
callbacks => #{enable =>
90-
{?MODULE, listener_records_in_ets_enable},
91-
post_enable =>
92-
{?MODULE, listener_records_in_ets_post_enable}}
80+
stability => required,
81+
depends_on => [feature_flags_v2]
9382
}}).
9483

9584
-rabbit_feature_flag(
9685
{tracking_records_in_ets,
9786
#{desc => "Store tracking records in ETS instead of Mnesia",
98-
stability => stable,
99-
depends_on => [feature_flags_v2],
100-
callbacks => #{enable =>
101-
{?MODULE, tracking_records_in_ets_enable},
102-
post_enable =>
103-
{?MODULE, tracking_records_in_ets_post_enable}}
87+
stability => required,
88+
depends_on => [feature_flags_v2]
10489
}}).
10590

10691
-rabbit_feature_flag(
10792
{classic_queue_type_delivery_support,
10893
#{desc => "Bug fix for classic queue deliveries using mixed versions",
10994
doc_url => "https://github.com/rabbitmq/rabbitmq-server/issues/5931",
110-
stability => stable,
95+
stability => required,
11196
depends_on => [stream_queue]
11297
}}).
11398

@@ -118,120 +103,3 @@
118103
stability => stable,
119104
depends_on => [stream_queue]
120105
}}).
121-
122-
%% -------------------------------------------------------------------
123-
%% Direct exchange routing v2.
124-
%% -------------------------------------------------------------------
125-
126-
-spec direct_exchange_routing_v2_enable(Args) -> Ret when
127-
Args :: rabbit_feature_flags:enable_callback_args(),
128-
Ret :: rabbit_feature_flags:enable_callback_ret().
129-
direct_exchange_routing_v2_enable(#{feature_name := FeatureName}) ->
130-
TableName = rabbit_index_route,
131-
ok = rabbit_table:wait([rabbit_route], _Retry = true),
132-
try
133-
ok = rabbit_table:create(
134-
TableName, rabbit_table:rabbit_index_route_definition()),
135-
case rabbit_table:ensure_table_copy(TableName, node(), ram_copies) of
136-
ok ->
137-
ok = rabbit_binding:populate_index_route_table();
138-
{error, Err} = Error ->
139-
rabbit_log_feature_flags:error(
140-
"Feature flags: `~ts`: failed to add copy of table ~ts to "
141-
"node ~tp: ~tp",
142-
[FeatureName, TableName, node(), Err]),
143-
Error
144-
end
145-
catch throw:{error, Reason} ->
146-
rabbit_log_feature_flags:error(
147-
"Feature flags: `~ts`: enable callback failure: ~tp",
148-
[FeatureName, Reason]),
149-
{error, Reason}
150-
end.
151-
152-
%% -------------------------------------------------------------------
153-
%% Listener records moved from Mnesia to ETS.
154-
%% -------------------------------------------------------------------
155-
156-
listener_records_in_ets_enable(#{feature_name := FeatureName}) ->
157-
try
158-
rabbit_misc:execute_mnesia_transaction(
159-
fun () ->
160-
mnesia:lock({table, rabbit_listener}, read),
161-
Listeners = mnesia:select(
162-
rabbit_listener, [{'$1',[],['$1']}]),
163-
lists:foreach(
164-
fun(Listener) ->
165-
ets:insert(rabbit_listener_ets, Listener)
166-
end, Listeners)
167-
end)
168-
catch
169-
throw:{error, {no_exists, rabbit_listener}} ->
170-
ok;
171-
throw:{error, Reason} ->
172-
rabbit_log_feature_flags:error(
173-
"Feature flags: `~ts`: failed to migrate Mnesia table: ~tp",
174-
[FeatureName, Reason]),
175-
{error, Reason}
176-
end.
177-
178-
listener_records_in_ets_post_enable(#{feature_name := FeatureName}) ->
179-
try
180-
case mnesia:delete_table(rabbit_listener) of
181-
{atomic, ok} ->
182-
ok;
183-
{aborted, {no_exists, _}} ->
184-
ok;
185-
{aborted, Err} ->
186-
rabbit_log_feature_flags:error(
187-
"Feature flags: `~ts`: failed to delete Mnesia table: ~tp",
188-
[FeatureName, Err]),
189-
ok
190-
end
191-
catch
192-
throw:{error, Reason} ->
193-
rabbit_log_feature_flags:error(
194-
"Feature flags: `~ts`: failed to delete Mnesia table: ~tp",
195-
[FeatureName, Reason]),
196-
ok
197-
end.
198-
199-
tracking_records_in_ets_enable(#{feature_name := FeatureName}) ->
200-
try
201-
rabbit_connection_tracking:migrate_tracking_records(),
202-
rabbit_channel_tracking:migrate_tracking_records()
203-
catch
204-
throw:{error, {no_exists, _}} ->
205-
ok;
206-
throw:{error, Reason} ->
207-
rabbit_log_feature_flags:error("Enabling feature flag ~ts failed: ~tp",
208-
[FeatureName, Reason]),
209-
{error, Reason}
210-
end.
211-
212-
tracking_records_in_ets_post_enable(#{feature_name := FeatureName}) ->
213-
try
214-
[delete_table(FeatureName, Tab) ||
215-
Tab <- rabbit_connection_tracking:get_all_tracked_connection_table_names_for_node(node())],
216-
[delete_table(FeatureName, Tab) ||
217-
Tab <- rabbit_channel_tracking:get_all_tracked_channel_table_names_for_node(node())]
218-
catch
219-
throw:{error, Reason} ->
220-
rabbit_log_feature_flags:error("Enabling feature flag ~ts failed: ~tp",
221-
[FeatureName, Reason]),
222-
%% adheres to the callback interface
223-
ok
224-
end.
225-
226-
delete_table(FeatureName, Tab) ->
227-
case mnesia:delete_table(Tab) of
228-
{atomic, ok} ->
229-
ok;
230-
{aborted, {no_exists, _}} ->
231-
ok;
232-
{aborted, Err} ->
233-
rabbit_log_feature_flags:error("Enabling feature flag ~ts failed to delete mnesia table ~tp: ~tp",
234-
[FeatureName, Tab, Err]),
235-
%% adheres to the callback interface
236-
ok
237-
end.

0 commit comments

Comments
 (0)