summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordcorbacho <dparracorbacho@piotal.io>2020-11-18 12:11:51 +0000
committerdcorbacho <dparracorbacho@piotal.io>2020-11-18 12:11:51 +0000
commitf7c127a9ef23fbf045b4c2d310b86a56d0755575 (patch)
tree2276a48635629dd017f5ace6c355c08d9483ceab
parent778e8dad5ceb9fec974d7ceea04081cc2e35872b (diff)
downloadrabbitmq-server-git-f7c127a9ef23fbf045b4c2d310b86a56d0755575.tar.gz
Ensure pg2 group is created only when links are created and removed with themrabbitmq-server-2497
The queue decorator is called even when no links are present, which caused the pg2 group to be created. At the same time, deleting a link wasn't deleting the queue group. Closes #2497
-rw-r--r--deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl10
1 files changed, 8 insertions, 2 deletions
diff --git a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl
index 97389cb8f6..b9a371c40a 100644
--- a/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl
+++ b/deps/rabbitmq_federation/src/rabbit_federation_queue_link.erl
@@ -49,8 +49,12 @@ all() ->
pg2:get_members(pgname(rabbit_federation_queues)).
q(QName) ->
- pg2:create(pgname({rabbit_federation_queue, QName})),
- pg2:get_members(pgname({rabbit_federation_queue, QName})).
+ case pg2:get_members(pgname({rabbit_federation_queue, QName})) of
+ {error, {no_such_group, _}} ->
+ [];
+ Members ->
+ Members
+ end.
federation_up() ->
proplists:is_defined(rabbitmq_federation,
@@ -180,6 +184,7 @@ terminate(Reason, #not_started{upstream = Upstream,
queue = Q}) when ?is_amqqueue(Q) ->
QName = amqqueue:get_name(Q),
rabbit_federation_link_util:log_terminate(Reason, Upstream, UParams, QName),
+ pg2:delete(pgname({rabbit_federation_queue, QName})),
ok;
terminate(Reason, #state{dconn = DConn,
@@ -191,6 +196,7 @@ terminate(Reason, #state{dconn = DConn,
rabbit_federation_link_util:ensure_connection_closed(DConn),
rabbit_federation_link_util:ensure_connection_closed(Conn),
rabbit_federation_link_util:log_terminate(Reason, Upstream, UParams, QName),
+ pg2:delete(pgname({rabbit_federation_queue, QName})),
ok.
code_change(_OldVsn, State, _Extra) ->