summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Klishin <michael@clojurewerkz.org>2017-12-14 18:37:46 +0300
committerMichael Klishin <michael@clojurewerkz.org>2017-12-15 14:16:32 +0300
commitd04986222815f9345c0e47de14924699ab0a000f (patch)
tree0672cc932ebbc03b6bcd8afb34ab9746ea096e87
parentb1a4874722c7f53010856eb3653ad4724e23f454 (diff)
downloadrabbitmq-server-git-d04986222815f9345c0e47de14924699ab0a000f.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] (cherry picked from commit e08895d07c87bd0ba0879d1a23c856c233f29191)
-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()}} |