Skip to content

Commit 15f1da0

Browse files
SimonUngemichaelklishin
authored andcommitted
Check consumer size for clean strats
1 parent f843314 commit 15f1da0

File tree

2 files changed

+26
-17
lines changed

2 files changed

+26
-17
lines changed

deps/rabbit/src/rabbit_channel.erl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -824,8 +824,10 @@ terminate(_Reason,
824824
rabbit_global_counters:consumer_deleted(amqp091)
825825
end, CM),
826826
rabbit_core_metrics:channel_closed(self()),
827+
CMSize = maps:size(CM),
827828
rabbit_event:notify(channel_closed, [{pid, self()},
828-
{user_who_performed_action, Username}]),
829+
{user_who_performed_action, Username},
830+
{consumer_count, CMSize}]),
829831
case rabbit_confirms:size(State#ch.unconfirmed) of
830832
0 -> ok;
831833
NumConfirms ->
@@ -2860,4 +2862,3 @@ maybe_decrease_global_publishers(#ch{publishing_mode = true}) ->
28602862

28612863
is_global_qos_permitted() ->
28622864
rabbit_deprecated_features:is_permitted(global_qos).
2863-

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.
@@ -137,18 +140,23 @@ delete_samples(Table, Id, Intervals) ->
137140
[ets:delete(Table, {Id, I}) || I <- Intervals],
138141
ok.
139142

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

0 commit comments

Comments
 (0)