summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Nilsson <kjnilsson@gmail.com>2022-10-25 12:53:04 +0100
committerMergify <37929162+mergify[bot]@users.noreply.github.com>2022-10-27 05:53:17 +0000
commit35eabce79a9afbdc75f56f77d51e2261e3b71b7f (patch)
tree462a057045d337bae2c710ed6e336b2f2f608a82
parent3fad1fc4023b96f4c0a6a3e2617568deb8abd4b0 (diff)
downloadrabbitmq-server-git-35eabce79a9afbdc75f56f77d51e2261e3b71b7f.tar.gz
Correctly decrease global counters in rabbit_channel:terminate/2
Previously publisher counts would be decremented only if "publishing_mode" was set to false resulting in ever decreasing global counters. No consumer counts were decremented in terminate previously resulting in ever growing consumer counts. Add assertion to ensure global counters are decremented (cherry picked from commit f8a8fb749ffb49e3b36885af99b3875980cc844a)
-rw-r--r--deps/rabbit/src/rabbit_channel.erl9
-rw-r--r--deps/rabbit/test/queue_type_SUITE.erl9
2 files changed, 16 insertions, 2 deletions
diff --git a/deps/rabbit/src/rabbit_channel.erl b/deps/rabbit/src/rabbit_channel.erl
index fd25d00478..312af19413 100644
--- a/deps/rabbit/src/rabbit_channel.erl
+++ b/deps/rabbit/src/rabbit_channel.erl
@@ -877,6 +877,7 @@ handle_post_hibernate(State0) ->
terminate(_Reason,
State = #ch{cfg = #conf{user = #user{username = Username}},
+ consumer_mapping = CM,
queue_states = QueueCtxs}) ->
_ = rabbit_queue_type:close(QueueCtxs),
{_Res, _State1} = notify_queues(State),
@@ -885,6 +886,10 @@ terminate(_Reason,
fun() -> emit_stats(State) end),
[delete_stats(Tag) || {Tag, _} <- get()],
maybe_decrease_global_publishers(State),
+ _ = maps:map(
+ fun (_, _) ->
+ rabbit_global_counters:consumer_deleted(amqp091)
+ end, CM),
rabbit_core_metrics:channel_closed(self()),
rabbit_event:notify(channel_closed, [{pid, self()},
{user_who_performed_action, Username}]).
@@ -2903,7 +2908,7 @@ maybe_increase_global_publishers(State0) ->
rabbit_global_counters:publisher_created(amqp091),
State0#ch{publishing_mode = true}.
-maybe_decrease_global_publishers(#ch{publishing_mode = true}) ->
- ok;
maybe_decrease_global_publishers(#ch{publishing_mode = false}) ->
+ ok;
+maybe_decrease_global_publishers(#ch{publishing_mode = true}) ->
rabbit_global_counters:publisher_deleted(amqp091).
diff --git a/deps/rabbit/test/queue_type_SUITE.erl b/deps/rabbit/test/queue_type_SUITE.erl
index b757563f46..3143589356 100644
--- a/deps/rabbit/test/queue_type_SUITE.erl
+++ b/deps/rabbit/test/queue_type_SUITE.erl
@@ -187,6 +187,15 @@ smoke(Config) ->
messages_get_empty_total => 2,
messages_redelivered_total => 1
}, ProtocolQueueTypeCounters),
+
+
+ ok = rabbit_ct_client_helpers:close_channel(Ch),
+
+ ?assertMatch(
+ #{consumers := 0,
+ publishers := 0},
+ maps:get([{protocol, amqp091}], get_global_counters(Config))),
+
ok.
ack_after_queue_delete(Config) ->