Skip to content

Commit 56e4ed5

Browse files
committed
Remove compatibility for flag tracking_records_in_ets
1 parent d0dc951 commit 56e4ed5

10 files changed

+62
-704
lines changed

deps/rabbit/src/rabbit_channel_tracking.erl

Lines changed: 20 additions & 231 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
register_tracked/1,
2424
unregister_tracked/1,
2525
count_tracked_items_in/1,
26-
clear_tracking_tables/0,
2726
shutdown_tracked_items/2]).
2827

2928
-export([list/0, list_of_user/1, list_on_node/1,
@@ -34,10 +33,6 @@
3433

3534
-export([count_local_tracked_items_of_user/1]).
3635

37-
-ifdef(TEST).
38-
-export([get_all_tracked_channel_table_names_for_node/1]).
39-
-endif.
40-
4136
-include_lib("rabbit_common/include/rabbit.hrl").
4237

4338
-import(rabbit_misc, [pget/2]).
@@ -53,9 +48,6 @@
5348
-spec boot() -> ok.
5449

5550
boot() ->
56-
ensure_tracked_channels_table_for_this_node(),
57-
ensure_per_user_tracked_channels_table_for_node(),
58-
clear_tracking_tables(),
5951
ok.
6052

6153
-spec update_tracked(term()) -> ok.
@@ -115,30 +107,13 @@ handle_cast({user_deleted, Details}) ->
115107
%% Schedule user entry deletion, allowing time for connections to close
116108
_ = timer:apply_after(?TRACKING_EXECUTION_TIMEOUT, ?MODULE,
117109
delete_tracked_channel_user_entry, [Username]),
118-
ok;
119-
handle_cast({node_deleted, Details}) ->
120-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
121-
true ->
122-
ok;
123-
false ->
124-
Node = pget(node, Details),
125-
rabbit_log_channel:info(
126-
"Node '~ts' was removed from the cluster, deleting"
127-
" its channel tracking tables...", [Node]),
128-
delete_tracked_channels_table_for_node(Node),
129-
delete_per_user_tracked_channels_table_for_node(Node)
130-
end.
110+
ok.
131111

132112
-spec register_tracked(rabbit_types:tracked_channel()) -> ok.
133113
-dialyzer([{nowarn_function, [register_tracked/1]}]).
134114

135-
register_tracked(TrackedCh = #tracked_channel{node = Node}) when Node == node() ->
136-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
137-
true -> register_tracked_ets(TrackedCh);
138-
false -> register_tracked_mnesia(TrackedCh)
139-
end.
140-
141-
register_tracked_ets(TrackedCh = #tracked_channel{pid = ChPid, username = Username}) ->
115+
register_tracked(TrackedCh = #tracked_channel{pid = ChPid, username = Username,
116+
node = Node}) when Node == node() ->
142117
case ets:lookup(?TRACKED_CHANNEL_TABLE, ChPid) of
143118
[] ->
144119
ets:insert(?TRACKED_CHANNEL_TABLE, TrackedCh),
@@ -149,85 +124,31 @@ register_tracked_ets(TrackedCh = #tracked_channel{pid = ChPid, username = Userna
149124
end,
150125
ok.
151126

152-
register_tracked_mnesia(TrackedCh =
153-
#tracked_channel{node = Node, name = Name, username = Username}) ->
154-
ChId = rabbit_tracking:id(Node, Name),
155-
TableName = tracked_channel_table_name_for(Node),
156-
PerUserChTableName = tracked_channel_per_user_table_name_for(Node),
157-
case mnesia:dirty_read(TableName, ChId) of
158-
[] ->
159-
mnesia:dirty_write(TableName, TrackedCh),
160-
mnesia:dirty_update_counter(PerUserChTableName, Username, 1),
161-
ok;
162-
[#tracked_channel{}] ->
163-
ok
164-
end,
165-
ok.
166-
167127
-spec unregister_tracked_by_pid(pid()) -> any().
168128
unregister_tracked_by_pid(ChPid) when node(ChPid) == node() ->
169-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
170-
true -> unregister_tracked_by_pid_ets(ChPid);
171-
false -> unregister_tracked_by_pid_mnesia(ChPid)
172-
end.
173-
174-
unregister_tracked_by_pid_ets(ChPid) ->
175129
case ets:lookup(?TRACKED_CHANNEL_TABLE, ChPid) of
176130
[] -> ok;
177131
[#tracked_channel{username = Username}] ->
178132
ets:update_counter(?TRACKED_CHANNEL_TABLE_PER_USER, Username, -1),
179133
ets:delete(?TRACKED_CHANNEL_TABLE, ChPid)
180134
end.
181135

182-
unregister_tracked_by_pid_mnesia(ChPid) ->
183-
case get_tracked_channel_by_pid_mnesia(ChPid) of
184-
[] -> ok;
185-
[#tracked_channel{id = ChId, node = Node, username = Username}] ->
186-
TableName = tracked_channel_table_name_for(Node),
187-
PerUserChannelTableName = tracked_channel_per_user_table_name_for(Node),
188-
189-
mnesia:dirty_update_counter(PerUserChannelTableName, Username, -1),
190-
mnesia:dirty_delete(TableName, ChId)
191-
end.
192-
193136
%% @doc This function is exported and implements a rabbit_tracking
194137
%% callback, however it is not used in rabbitmq-server any more. It is
195138
%% only kept for backwards compatibility if 3rd-party code would rely
196139
%% on it.
197140
-spec unregister_tracked(rabbit_types:tracked_channel_id()) -> ok.
198141
unregister_tracked(ChId = {Node, _Name}) when Node == node() ->
199-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
200-
true -> unregister_tracked_ets(ChId);
201-
false -> unregister_tracked_mnesia(ChId)
202-
end.
203-
204-
unregister_tracked_ets(ChId) ->
205-
case get_tracked_channel_by_id_ets(ChId) of
142+
case get_tracked_channel_by_id(ChId) of
206143
[] -> ok;
207144
[#tracked_channel{pid = ChPid, username = Username}] ->
208145
ets:update_counter(?TRACKED_CHANNEL_TABLE_PER_USER, Username, -1),
209146
ets:delete(?TRACKED_CHANNEL_TABLE, ChPid)
210147
end.
211148

212-
unregister_tracked_mnesia(ChId = {Node, _Name}) when Node =:= node() ->
213-
TableName = tracked_channel_table_name_for(Node),
214-
PerUserChannelTableName = tracked_channel_per_user_table_name_for(Node),
215-
case mnesia:dirty_read(TableName, ChId) of
216-
[] -> ok;
217-
[#tracked_channel{username = Username}] ->
218-
mnesia:dirty_update_counter(PerUserChannelTableName, Username, -1),
219-
mnesia:dirty_delete(TableName, ChId)
220-
end.
221-
222149
-spec count_tracked_items_in({atom(), rabbit_types:username()}) -> non_neg_integer().
223150

224-
count_tracked_items_in(Type) ->
225-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
226-
true -> count_tracked_items_in_ets(Type);
227-
false -> count_tracked_items_in_mnesia(Type)
228-
end.
229-
230-
count_tracked_items_in_ets({user, Username}) ->
151+
count_tracked_items_in({user, Username}) ->
231152
rabbit_tracking:count_on_all_nodes(
232153
?MODULE, count_local_tracked_items_of_user, [Username],
233154
["channels of user ", Username]).
@@ -236,20 +157,6 @@ count_tracked_items_in_ets({user, Username}) ->
236157
count_local_tracked_items_of_user(Username) ->
237158
rabbit_tracking:read_ets_counter(?TRACKED_CHANNEL_TABLE_PER_USER, Username).
238159

239-
count_tracked_items_in_mnesia({user, Username}) ->
240-
rabbit_tracking:count_tracked_items_mnesia(
241-
fun tracked_channel_per_user_table_name_for/1,
242-
#tracked_channel_per_user.channel_count, Username,
243-
"channels of user").
244-
245-
-spec clear_tracking_tables() -> ok.
246-
247-
clear_tracking_tables() ->
248-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
249-
true -> ok;
250-
false -> clear_tracked_channel_tables_for_this_node()
251-
end.
252-
253160
-spec shutdown_tracked_items(list(), term()) -> ok.
254161

255162
shutdown_tracked_items(TrackedItems, _Args) ->
@@ -267,50 +174,18 @@ list() ->
267174
-spec list_of_user(rabbit_types:username()) -> [rabbit_types:tracked_channel()].
268175

269176
list_of_user(Username) ->
270-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
271-
true -> list_of_user_ets(Username);
272-
false -> list_of_user_mnesia(Username)
273-
end.
274-
275-
list_of_user_ets(Username) ->
276-
rabbit_tracking:match_tracked_items_ets(
177+
rabbit_tracking:match_tracked_items(
277178
?TRACKED_CHANNEL_TABLE,
278179
#tracked_channel{username = Username, _ = '_'}).
279180

280-
list_of_user_mnesia(Username) ->
281-
rabbit_tracking:match_tracked_items_mnesia(
282-
fun tracked_channel_table_name_for/1,
283-
#tracked_channel{username = Username, _ = '_'}).
284-
285181
-spec list_on_node(node()) -> [rabbit_types:tracked_channel()].
182+
list_on_node(Node) when Node == node() ->
183+
ets:tab2list(?TRACKED_CHANNEL_TABLE);
286184
list_on_node(Node) ->
287-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
288-
true when Node == node() ->
289-
list_on_node_ets();
290-
true ->
291-
case rabbit_misc:rpc_call(Node, ?MODULE, list_on_node, [Node]) of
292-
List when is_list(List) ->
293-
List;
294-
_ ->
295-
[]
296-
end;
297-
false ->
298-
list_on_node_mnesia(Node)
299-
end.
300-
301-
list_on_node_ets() ->
302-
ets:tab2list(?TRACKED_CHANNEL_TABLE).
303-
304-
list_on_node_mnesia(Node) ->
305-
try mnesia:dirty_match_object(
306-
tracked_channel_table_name_for(Node),
307-
#tracked_channel{_ = '_'})
308-
catch exit:{aborted, {no_exists, _}} ->
309-
%% The table might not exist yet (or is already gone)
310-
%% between the time rabbit_nodes:list_running() runs and
311-
%% returns a specific node, and
312-
%% mnesia:dirty_match_object() is called for that node's
313-
%% table.
185+
case rabbit_misc:rpc_call(Node, ?MODULE, list_on_node, [Node]) of
186+
List when is_list(List) ->
187+
List;
188+
_ ->
314189
[]
315190
end.
316191

@@ -326,118 +201,32 @@ tracked_channel_per_user_table_name_for(Node) ->
326201
"tracked_channel_table_per_user_on_node_~ts", [Node])).
327202

328203
ensure_tracked_tables_for_this_node() ->
329-
_ = ensure_tracked_channels_table_for_this_node_ets(),
330-
_ = ensure_per_user_tracked_channels_table_for_this_node_ets(),
204+
_ = ensure_tracked_channels_table_for_this_node(),
205+
_ = ensure_per_user_tracked_channels_table_for_this_node(),
331206
ok.
332207

333-
%% internal
334-
ensure_tracked_channels_table_for_this_node() ->
335-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
336-
true ->
337-
ok;
338-
false ->
339-
ensure_tracked_channels_table_for_this_node_mnesia()
340-
end.
341-
342-
ensure_per_user_tracked_channels_table_for_node() ->
343-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
344-
true ->
345-
ok;
346-
false ->
347-
ensure_per_user_tracked_channels_table_for_this_node_mnesia()
348-
end.
349-
350208
%% Create tables
351-
ensure_tracked_channels_table_for_this_node_ets() ->
209+
ensure_tracked_channels_table_for_this_node() ->
352210
rabbit_log:info("Setting up a table for channel tracking on this node: ~tp",
353211
[?TRACKED_CHANNEL_TABLE]),
354212
ets:new(?TRACKED_CHANNEL_TABLE, [named_table, public, {write_concurrency, true},
355213
{keypos, #tracked_channel.pid}]).
356214

357-
ensure_tracked_channels_table_for_this_node_mnesia() ->
358-
Node = node(),
359-
TableName = tracked_channel_table_name_for(Node),
360-
case mnesia:create_table(TableName, [{record_name, tracked_channel},
361-
{attributes, record_info(fields, tracked_channel)}]) of
362-
{atomic, ok} ->
363-
rabbit_log:info("Setting up a table for channel tracking on this node: ~tp",
364-
[TableName]),
365-
ok;
366-
{aborted, {already_exists, _}} ->
367-
rabbit_log:info("Setting up a table for channel tracking on this node: ~tp",
368-
[TableName]),
369-
ok;
370-
{aborted, Error} ->
371-
rabbit_log:error("Failed to create a tracked channel table for node ~tp: ~tp", [Node, Error]),
372-
ok
373-
end.
374-
375-
ensure_per_user_tracked_channels_table_for_this_node_ets() ->
215+
ensure_per_user_tracked_channels_table_for_this_node() ->
376216
rabbit_log:info("Setting up a table for channel tracking on this node: ~tp",
377217
[?TRACKED_CHANNEL_TABLE_PER_USER]),
378218
ets:new(?TRACKED_CHANNEL_TABLE_PER_USER, [named_table, public, {write_concurrency, true}]).
379219

380-
ensure_per_user_tracked_channels_table_for_this_node_mnesia() ->
381-
Node = node(),
382-
TableName = tracked_channel_per_user_table_name_for(Node),
383-
case mnesia:create_table(TableName, [{record_name, tracked_channel_per_user},
384-
{attributes, record_info(fields, tracked_channel_per_user)}]) of
385-
{atomic, ok} ->
386-
rabbit_log:info("Setting up a table for channel tracking on this node: ~tp",
387-
[TableName]),
388-
ok;
389-
{aborted, {already_exists, _}} ->
390-
rabbit_log:info("Setting up a table for channel tracking on this node: ~tp",
391-
[TableName]),
392-
ok;
393-
{aborted, Error} ->
394-
rabbit_log:error("Failed to create a per-user tracked channel table for node ~tp: ~tp", [Node, Error]),
395-
ok
396-
end.
397-
398-
clear_tracked_channel_tables_for_this_node() ->
399-
[rabbit_tracking:clear_tracking_table(T)
400-
|| T <- get_all_tracked_channel_table_names_for_node(node())].
401-
402-
delete_tracked_channels_table_for_node(Node) ->
403-
TableName = tracked_channel_table_name_for(Node),
404-
rabbit_tracking:delete_tracking_table(TableName, Node, "tracked channel").
405-
406-
delete_per_user_tracked_channels_table_for_node(Node) ->
407-
TableName = tracked_channel_per_user_table_name_for(Node),
408-
rabbit_tracking:delete_tracking_table(TableName, Node,
409-
"per-user tracked channels").
410-
411-
get_all_tracked_channel_table_names_for_node(Node) ->
412-
[tracked_channel_table_name_for(Node),
413-
tracked_channel_per_user_table_name_for(Node)].
414-
415220
get_tracked_channels_by_connection_pid(ConnPid) ->
416-
case rabbit_feature_flags:is_enabled(tracking_records_in_ets) of
417-
true -> get_tracked_channels_by_connection_pid_ets(ConnPid);
418-
false -> get_tracked_channels_by_connection_pid_mnesia(ConnPid)
419-
end.
420-
421-
get_tracked_channels_by_connection_pid_ets(ConnPid) ->
422221
rabbit_tracking:match_tracked_items_local(
423-
?TRACKED_CHANNEL_TABLE,
424-
#tracked_channel{connection = ConnPid, _ = '_'}).
425-
426-
get_tracked_channels_by_connection_pid_mnesia(ConnPid) ->
427-
rabbit_tracking:match_tracked_items_mnesia(
428-
fun tracked_channel_table_name_for/1,
429-
#tracked_channel{connection = ConnPid, _ = '_'}).
222+
?TRACKED_CHANNEL_TABLE,
223+
#tracked_channel{connection = ConnPid, _ = '_'}).
430224

431-
get_tracked_channel_by_id_ets(ChId) ->
432-
rabbit_tracking:match_tracked_items_ets(
225+
get_tracked_channel_by_id(ChId) ->
226+
rabbit_tracking:match_tracked_items(
433227
?TRACKED_CHANNEL_TABLE,
434228
#tracked_channel{id = ChId, _ = '_'}).
435229

436-
get_tracked_channel_by_pid_mnesia(ChPid) ->
437-
rabbit_tracking:match_tracked_items_mnesia(
438-
fun tracked_channel_table_name_for/1,
439-
#tracked_channel{pid = ChPid, _ = '_'}).
440-
441230
delete_tracked_channel_user_entry(Username) ->
442231
rabbit_tracking:delete_tracked_entry(
443232
{rabbit_auth_backend_internal, exists, [Username]},

0 commit comments

Comments
 (0)