Skip to content

Commit 6a239c4

Browse files
Merge pull request #1175 from rabbitmq/rabbitmq-server-1143
Register with peer discovery backend on start and stop
2 parents e07ca0e + f22376e commit 6a239c4

File tree

5 files changed

+88
-9
lines changed

5 files changed

+88
-9
lines changed

src/rabbit.erl

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
stop_and_halt/0, await_startup/0, status/0, is_running/0, alarms/0,
2323
is_running/1, environment/0, rotate_logs/0, force_event_refresh/1,
2424
start_fhc/0]).
25-
-export([start/2, stop/1]).
25+
-export([start/2, stop/1, prep_stop/1]).
2626
-export([start_apps/1, stop_apps/1]).
2727
-export([log_locations/0, config_files/0, decrypt_config/2]). %% for testing and mgmt-agent
2828

@@ -327,7 +327,9 @@ broker_start() ->
327327
ToBeLoaded = Plugins ++ ?APPS,
328328
start_apps(ToBeLoaded),
329329
maybe_sd_notify(),
330-
ok = log_broker_started(rabbit_plugins:strictly_plugins(rabbit_plugins:active())).
330+
ok = log_broker_started(rabbit_plugins:strictly_plugins(rabbit_plugins:active())),
331+
rabbit_peer_discovery:maybe_register(),
332+
ok.
331333

332334
%% Try to send systemd ready notification if it makes sense in the
333335
%% current environment. standard_error is used intentionally in all
@@ -471,6 +473,8 @@ stop() ->
471473
end,
472474
rabbit_log:info("RabbitMQ is asked to stop...~n", []),
473475
Apps = ?APPS ++ rabbit_plugins:active(),
476+
%% this will also perform unregistration with the peer discovery backend
477+
%% as needed
474478
stop_apps(app_utils:app_dependency_order(Apps, true)),
475479
rabbit_log:info("Successfully stopped RabbitMQ and its dependencies~n", []).
476480

@@ -759,6 +763,10 @@ start(normal, []) ->
759763
Error
760764
end.
761765

766+
prep_stop(State) ->
767+
rabbit_peer_discovery:maybe_unregister(),
768+
State.
769+
762770
stop(_State) ->
763771
ok = rabbit_alarm:stop(),
764772
ok = case rabbit_mnesia:is_clustered() of

src/rabbit_mnesia.erl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,14 +139,15 @@ init_from_config() ->
139139
{ok, _} ->
140140
e(invalid_cluster_nodes_conf)
141141
end,
142-
case DiscoveredNodes of
142+
Peers = nodes_excl_me(DiscoveredNodes),
143+
case Peers of
143144
[] ->
144145
rabbit_log:info("Discovered no peer nodes to cluster with"),
145146
init_db_and_upgrade([node()], disc, false, _Retry = true);
146147
_ ->
147148
rabbit_log:info("Discovered peer nodes: ~s~n",
148-
[rabbit_peer_discovery:format_discovered_nodes(DiscoveredNodes)]),
149-
join_discovered_peers(DiscoveredNodes, NodeType)
149+
[rabbit_peer_discovery:format_discovered_nodes(Peers)]),
150+
join_discovered_peers(Peers, NodeType)
150151
end.
151152

152153
%% Attempts to join discovered,

src/rabbit_peer_discovery.erl

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@
2121
%%
2222

2323
-export([discover_cluster_nodes/0, backend/0, node_type/0,
24-
normalize/1, format_discovered_nodes/1, log_configured_backend/0]).
24+
normalize/1, format_discovered_nodes/1, log_configured_backend/0,
25+
register/0, unregister/0, maybe_register/0, maybe_unregister/0]).
2526
-export([append_node_prefix/1, node_prefix/0]).
2627

2728
-define(DEFAULT_BACKEND, rabbit_peer_discovery_classic_config).
@@ -72,6 +73,64 @@ discover_cluster_nodes() ->
7273
normalize(Backend:list_nodes()).
7374

7475

76+
-spec maybe_register() -> ok.
77+
78+
maybe_register() ->
79+
Backend = backend(),
80+
case Backend:supports_registration() of
81+
true ->
82+
register();
83+
false ->
84+
rabbit_log:info("Peer discovery backend ~s does not support registration, skipping registration.", [Backend]),
85+
ok
86+
end.
87+
88+
89+
-spec maybe_unregister() -> ok.
90+
91+
maybe_unregister() ->
92+
Backend = backend(),
93+
case Backend:supports_registration() of
94+
true ->
95+
unregister();
96+
false ->
97+
rabbit_log:info("Peer discovery backend ~s does not support registration, skipping unregistration.", [Backend]),
98+
ok
99+
end.
100+
101+
102+
-spec register() -> ok.
103+
104+
register() ->
105+
Backend = backend(),
106+
rabbit_log:info("Will register with peer discovery backend ~s", [Backend]),
107+
case Backend:register() of
108+
ok -> ok;
109+
{error, Error} ->
110+
rabbit_log:error("Failed to register with peer discovery backend ~s: ~p",
111+
[Backend, Error]),
112+
ok
113+
end.
114+
115+
116+
-spec unregister() -> ok.
117+
118+
unregister() ->
119+
Backend = backend(),
120+
rabbit_log:info("Will unregister with peer discovery backend ~s", [Backend]),
121+
case Backend:unregister() of
122+
ok -> ok;
123+
{error, Error} ->
124+
rabbit_log:error("Failed to unregister with peer discovery backend ~s: ~p",
125+
[Backend, Error]),
126+
ok
127+
end.
128+
129+
130+
%%
131+
%% Implementation
132+
%%
133+
75134
-spec normalize(Nodes :: list() |
76135
{Nodes :: list(), NodeType :: rabbit_types:node_type()} |
77136
{ok, Nodes :: list()} |
@@ -90,7 +149,6 @@ normalize({ok, {Nodes, NodeType}}) when is_list(Nodes) andalso is_atom(NodeType)
90149
normalize({error, Reason}) ->
91150
{error, Reason}.
92151

93-
94152
-spec format_discovered_nodes(Nodes :: list()) -> string().
95153

96154
format_discovered_nodes(Nodes) ->

src/rabbit_peer_discovery_classic_config.erl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
-include("rabbit.hrl").
2121

22-
-export([list_nodes/0, register/0, unregister/0]).
22+
-export([list_nodes/0, supports_registration/0, register/0, unregister/0]).
2323

2424
%%
2525
%% API
@@ -34,6 +34,11 @@ list_nodes() ->
3434
undefined -> {[], disc}
3535
end.
3636

37+
-spec supports_registration() -> boolean().
38+
39+
supports_registration() ->
40+
false.
41+
3742
-spec register() -> ok.
3843

3944
register() ->

src/rabbit_peer_discovery_dns.erl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
-include("rabbit.hrl").
2121

22-
-export([list_nodes/0, register/0, unregister/0]).
22+
-export([list_nodes/0, supports_registration/0, register/0, unregister/0]).
2323
%% for tests
2424
-export([discover_nodes/2, discover_hostnames/2]).
2525

@@ -48,6 +48,13 @@ list_nodes() ->
4848
end
4949
end.
5050

51+
52+
-spec supports_registration() -> boolean().
53+
54+
supports_registration() ->
55+
false.
56+
57+
5158
-spec register() -> ok.
5259

5360
register() ->

0 commit comments

Comments
 (0)