diff options
author | Karl Nilsson <kjnilsson@gmail.com> | 2022-10-25 12:53:04 +0100 |
---|---|---|
committer | Mergify <37929162+mergify[bot]@users.noreply.github.com> | 2022-10-27 05:53:17 +0000 |
commit | 35eabce79a9afbdc75f56f77d51e2261e3b71b7f (patch) | |
tree | 462a057045d337bae2c710ed6e336b2f2f608a82 | |
parent | 3fad1fc4023b96f4c0a6a3e2617568deb8abd4b0 (diff) | |
download | rabbitmq-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.erl | 9 | ||||
-rw-r--r-- | deps/rabbit/test/queue_type_SUITE.erl | 9 |
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) -> |