summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2017-12-14 18:37:46 +0300
committerMichael Klishin <michael@clojurewerkz.org>2017-12-14 18:37:46 +0300
commite08895d07c87bd0ba0879d1a23c856c233f29191 (patch)
tree4052cf84ccd31ad4cefda97fd5676ce7ae030f48 /src
parentee7ffd2e2cad1c748954245788842d77153e5434 (diff)
downloadrabbitmq-server-git-e08895d07c87bd0ba0879d1a23c856c233f29191.tar.gz
Add an optional init step for peer discovery mechanisms
Sometimes they need to perform some initialisation very early on, e.g. to configure HTTP client proxy settings or similar. Part of rabbitmq/rabbitmq-peer-discovery-common#5. [#153615554]
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_mnesia.erl2
-rw-r--r--src/rabbit_peer_discovery.erl18
2 files changed, 19 insertions, 1 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index a0363b69d0..10b6aef609 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -107,11 +107,13 @@ init() ->
"Assuming we need to join an existing cluster or initialise from scratch...~n",
[dir()]),
rabbit_peer_discovery:log_configured_backend(),
+ rabbit_peer_discovery:maybe_init(),
init_with_lock();
false ->
NodeType = node_type(),
init_db_and_upgrade(cluster_nodes(all), NodeType,
NodeType =:= ram, _Retry = true),
+ rabbit_peer_discovery:maybe_init(),
rabbit_peer_discovery:maybe_register()
end,
%% We intuitively expect the global name server to be synced when
diff --git a/src/rabbit_peer_discovery.erl b/src/rabbit_peer_discovery.erl
index 1abf2b7cc7..30ae500b67 100644
--- a/src/rabbit_peer_discovery.erl
+++ b/src/rabbit_peer_discovery.erl
@@ -20,7 +20,7 @@
%% API
%%
--export([discover_cluster_nodes/0, backend/0, node_type/0,
+-export([maybe_init/0, discover_cluster_nodes/0, backend/0, node_type/0,
normalize/1, format_discovered_nodes/1, log_configured_backend/0,
register/0, unregister/0, maybe_register/0, maybe_unregister/0,
maybe_inject_randomized_delay/0, lock/0, unlock/1]).
@@ -88,6 +88,22 @@ lock_acquisition_failure_mode() ->
log_configured_backend() ->
rabbit_log:info("Configured peer discovery backend: ~s~n", [backend()]).
+maybe_init() ->
+ Backend = backend(),
+ case erlang:function_exported(Backend, init, 0) of
+ true ->
+ rabbit_log:debug("Peer discovery backend supports initialisation."),
+ case Backend:init() of
+ ok ->
+ rabbit_log:debug("Peer discovery backend initialisation succeeded."),
+ ok;
+ {error, Error} ->
+ rabbit_log:warn("Peer discovery backend initialisation failed: ~p.", [Error]),
+ ok
+ end;
+ false -> ok
+ end.
+
-spec discover_cluster_nodes() -> {ok, Nodes :: list()} |
{ok, {Nodes :: list(), NodeType :: rabbit_types:node_type()}} |