Skip to content

Commit fa21f28

Browse files
SimonUngemergify[bot]
authored andcommitted
Check consumer size for clean strats
(cherry picked from commit a2ff5a0) # Conflicts: # deps/rabbit/src/rabbit_channel.erl
1 parent 24b0677 commit fa21f28

File tree

2 files changed

+32
-16
lines changed

2 files changed

+32
-16
lines changed

deps/rabbit/src/rabbit_channel.erl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -831,8 +831,10 @@ terminate(_Reason,
831831
rabbit_global_counters:consumer_deleted(amqp091)
832832
end, CM),
833833
rabbit_core_metrics:channel_closed(self()),
834+
CMSize = maps:size(CM),
834835
rabbit_event:notify(channel_closed, [{pid, self()},
835-
{user_who_performed_action, Username}]),
836+
{user_who_performed_action, Username},
837+
{consumer_count, CMSize}]),
836838
case rabbit_confirms:size(State#ch.unconfirmed) of
837839
0 -> ok;
838840
NumConfirms ->
@@ -2855,3 +2857,9 @@ maybe_decrease_global_publishers(#ch{publishing_mode = false}) ->
28552857
ok;
28562858
maybe_decrease_global_publishers(#ch{publishing_mode = true}) ->
28572859
rabbit_global_counters:publisher_deleted(amqp091).
2860+
<<<<<<< HEAD
2861+
=======
2862+
2863+
is_global_qos_permitted() ->
2864+
rabbit_deprecated_features:is_permitted(global_qos).
2865+
>>>>>>> a2ff5a0b7b (Check consumer size for clean strats)

deps/rabbitmq_management_agent/src/rabbit_mgmt_metrics_gc.erl

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
2020
code_change/3]).
2121

22+
-define(LARGE_CONSUMER_COUNT, 1000).
23+
2224
name(EventType) ->
2325
list_to_atom((atom_to_list(EventType) ++ "_metrics_gc")).
2426

@@ -42,7 +44,8 @@ handle_cast({event, #event{type = connection_closed, props = Props}},
4244
handle_cast({event, #event{type = channel_closed, props = Props}},
4345
State = #state{basic_i = BIntervals}) ->
4446
Pid = pget(pid, Props),
45-
remove_channel(Pid, BIntervals),
47+
CMCount = pget(consumer_count, Props),
48+
remove_channel(Pid, CMCount, BIntervals),
4649
{noreply, State};
4750
handle_cast({event, #event{type = consumer_deleted, props = Props}}, State) ->
4851
remove_consumer(Props),
@@ -82,13 +85,13 @@ remove_connection(Id, BIntervals) ->
8285
delete_samples(connection_stats_coarse_conn_stats, Id, BIntervals),
8386
ok.
8487

85-
remove_channel(Id, BIntervals) ->
88+
remove_channel(Id, CMCount, BIntervals) ->
8689
ets:delete(channel_created_stats, Id),
8790
ets:delete(channel_stats, Id),
8891
delete_samples(channel_process_stats, Id, BIntervals),
8992
delete_samples(channel_stats_fine_stats, Id, BIntervals),
9093
delete_samples(channel_stats_deliver_stats, Id, BIntervals),
91-
index_delete(consumer_stats, channel, Id),
94+
index_delete(consumer_stats, {channel, CMCount}, Id),
9295
index_delete(channel_exchange_stats_fine_stats, channel, Id),
9396
index_delete(channel_queue_stats_deliver_stats, channel, Id),
9497
ok.
@@ -136,18 +139,23 @@ delete_samples(Table, Id, Intervals) ->
136139
[ets:delete(Table, {Id, I}) || I <- Intervals],
137140
ok.
138141

139-
index_delete(consumer_stats = Table, channel = Type, Id) ->
140-
IndexTable = rabbit_mgmt_metrics_collector:index_table(Table, Type),
141-
MatchPattern = {'_', Id, '_'},
142-
%% Delete consumer_stats_queue_index
143-
ets:match_delete(consumer_stats_queue_index,
144-
{'_', MatchPattern}),
145-
%% Delete consumer_stats
146-
ets:match_delete(consumer_stats,
147-
{MatchPattern,'_'}),
148-
%% Delete consumer_stats_channel_index
149-
ets:delete(IndexTable, Id),
150-
ok;
142+
index_delete(consumer_stats = Table, {channel = Type, Count}, Id) ->
143+
case Count > ?LARGE_CONSUMER_COUNT of
144+
true ->
145+
IndexTable = rabbit_mgmt_metrics_collector:index_table(Table, Type),
146+
MatchPattern = {'_', Id, '_'},
147+
%% Delete consumer_stats_queue_index
148+
ets:match_delete(consumer_stats_queue_index,
149+
{'_', MatchPattern}),
150+
%% Delete consumer_stats
151+
ets:match_delete(consumer_stats,
152+
{MatchPattern,'_'}),
153+
%% Delete consumer_stats_channel_index
154+
ets:delete(IndexTable, Id),
155+
ok;
156+
false ->
157+
index_delete(Table, Type, Id)
158+
end;
151159
index_delete(Table, Type, Id) ->
152160
IndexTable = rabbit_mgmt_metrics_collector:index_table(Table, Type),
153161
Keys = ets:lookup(IndexTable, Id),

0 commit comments

Comments
 (0)