Skip to content

Commit f84828e

Browse files
authored
Merge pull request #14054 from rabbitmq/terminate-links-when-federation-plugins-stop
rabbitmq_*_federation: Stop links during plugin stop
2 parents 50e5fc7 + 033ab45 commit f84828e

File tree

4 files changed

+30
-2
lines changed

4 files changed

+30
-2
lines changed

deps/rabbitmq_exchange_federation/src/rabbit_federation_exchange_link.erl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,9 @@ handle_info(check_internal_exchange, State = #state{internal_exchange = IntXName
184184
{noreply, State#state{internal_exchange_timer = TRef}}
185185
end;
186186

187+
handle_info({'EXIT', _From, Reason}, State) ->
188+
{stop, Reason, State};
189+
187190
handle_info(Msg, State) ->
188191
{stop, {unexpected_info, Msg}, State}.
189192

deps/rabbitmq_federation_common/src/rabbit_federation_link_sup.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ specs(LinkMod, XorQ) ->
9999

100100
spec(LinkMod, U = #upstream{reconnect_delay = Delay}, #exchange{name = XName}) ->
101101
{U, {LinkMod, start_link, [{U, XName}]},
102-
{permanent, Delay}, ?WORKER_WAIT, worker,
102+
{transient, Delay}, ?WORKER_WAIT, worker,
103103
[LinkMod]};
104104

105105
spec(LinkMod, Upstream = #upstream{reconnect_delay = Delay}, Q) when ?is_amqqueue(Q) ->
106106
{Upstream, {LinkMod, start_link, [{Upstream, Q}]},
107-
{permanent, Delay}, ?WORKER_WAIT, worker,
107+
{transient, Delay}, ?WORKER_WAIT, worker,
108108
[LinkMod]}.
109109

110110
name(#exchange{name = XName}) -> XName;

deps/rabbitmq_federation_common/src/rabbit_federation_pg.erl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,29 @@ stop_scope(Scope) ->
1717
case whereis(Scope) of
1818
Pid when is_pid(Pid) ->
1919
rabbit_log_federation:debug("Stopping pg scope ~ts", [Scope]),
20+
Groups = pg:which_groups(Scope),
21+
lists:foreach(
22+
fun(Group) ->
23+
stop_group(Scope, Group)
24+
end, Groups),
2025
exit(Pid, normal);
2126
_ ->
2227
ok
2328
end.
29+
30+
stop_group(Scope, Group) ->
31+
Members = pg:get_local_members(Scope, Group),
32+
MRefs = [erlang:monitor(process, Member) || Member <- Members],
33+
lists:foreach(
34+
fun(Member) ->
35+
exit(Member, normal)
36+
end, Members),
37+
lists:foreach(
38+
fun(MRef) ->
39+
receive
40+
{'DOWN', MRef, process, _Member, _Info} ->
41+
logger:alert("Member ~p stopped: ~0p", [_Member, _Info]),
42+
ok
43+
end
44+
end, MRefs),
45+
ok.

deps/rabbitmq_queue_federation/src/rabbit_federation_queue_link.erl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,9 @@ handle_info({'DOWN', _Ref, process, Pid, Reason},
162162
QName = amqqueue:get_name(Q),
163163
handle_down(Pid, Reason, Ch, DCh, {Upstream, UParams, QName}, State);
164164

165+
handle_info({'EXIT', _From, Reason}, State) ->
166+
{stop, Reason, State};
167+
165168
handle_info(Msg, State) ->
166169
{stop, {unexpected_info, Msg}, State}.
167170

0 commit comments

Comments
 (0)