-
Notifications
You must be signed in to change notification settings - Fork 4k
Expand file tree
/
Copy pathrabbit_exchange_federation_sup.erl
More file actions
73 lines (59 loc) · 2.53 KB
/
Copy pathrabbit_exchange_federation_sup.erl
File metadata and controls
73 lines (59 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
%% This Source Code Form is subject to the terms of the Mozilla Public
%% License, v. 2.0. If a copy of the MPL was not distributed with this
%% file, You can obtain one at https://mozilla.org/MPL/2.0/.
%%
%% Copyright (c) 2007-2026 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved.
%%
-module(rabbit_exchange_federation_sup).
-behaviour(supervisor).
%% Supervises everything. There is just one of these.
-include_lib("rabbit_common/include/rabbit.hrl").
-include_lib("kernel/include/logger.hrl").
-define(SUPERVISOR, ?MODULE).
-export([start_link/0,
stop/0]).
-export([init/1]).
%% This supervisor needs to be part of the rabbit application since
%% a) it needs to be in place when exchange recovery takes place
%% b) it needs to go up and down with rabbit
-rabbit_boot_step({rabbit_exchange_federation_supervisor,
[{description, "federation"},
{mfa, {rabbit_sup, start_supervisor_child, [?MODULE]}},
{requires, [kernel_ready, rabbit_federation_supervisor]},
{cleanup, {?MODULE, stop, []}},
{enables, rabbit_federation_exchange}]}).
%%----------------------------------------------------------------------------
start_link() ->
supervisor:start_link({local, ?SUPERVISOR}, ?MODULE, []).
-spec stop() -> ok.
stop() ->
?LOG_INFO("~s terminating...", [?MODULE]),
case supervisor:terminate_child(rabbit_sup, ?MODULE) of
ok ->
?LOG_INFO("~s terminated", [?MODULE]),
ok = supervisor:delete_child(rabbit_sup, ?MODULE);
{error, not_found} ->
?LOG_INFO("~s already terminated", [?MODULE]),
ok
end.
%%----------------------------------------------------------------------------
init([]) ->
XLinkSupSup = #{
id => x_links,
start => {rabbit_federation_exchange_link_sup_sup, start_link, []},
restart => permanent,
shutdown => ?SUPERVISOR_WAIT,
type => supervisor,
modules =>[rabbit_federation_exchange_link_sup_sup]
},
%% with default reconnect-delay of 5 second, this supports up to
%% 100 links constantly failing and being restarted a minute
%% (or 200 links if reconnect-delay is 10 seconds, 600 with 30 seconds,
%% etc: N * (60/reconnect-delay) <= 1200)
Flags = #{
strategy => one_for_one,
intensity => 1200,
period => 60
},
Specs = [XLinkSupSup],
{ok, {Flags, Specs}}.