summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMichael Klishin <michael@novemberain.com>2016-01-14 23:48:40 +0300
committerMichael Klishin <michael@novemberain.com>2016-01-14 23:48:40 +0300
commitd54c06ab2ffd82f6f4d1edb19fd646b84f07ba0e (patch)
tree45aefe1000777a98b93064cbcb36a3aa9b9fe6ad /src
parent86db8bccc9530e40105a0969e3c0fd09c82fc93d (diff)
parent5eeed4886c1b52f9f92158720813749b5f868325 (diff)
downloadrabbitmq-server-git-d54c06ab2ffd82f6f4d1edb19fd646b84f07ba0e.tar.gz
Merge pull request #552 from binarin/rabbitmq-server-549
Limit number of unique node names for rabbitmqctl
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_cli.erl29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/rabbit_cli.erl b/src/rabbit_cli.erl
index 124f41ef1d..4aad3c0916 100644
--- a/src/rabbit_cli.erl
+++ b/src/rabbit_cli.erl
@@ -45,11 +45,21 @@
-endif.
+ensure_cli_distribution() ->
+ case start_distribution() of
+ {ok, _} ->
+ ok;
+ {error, Error} ->
+ print_error("Failed to initialize erlang distribution: ~p.",
+ [Error]),
+ rabbit_misc:quit(?EX_TEMPFAIL)
+ end.
+
%%----------------------------------------------------------------------------
main(ParseFun, DoFun, UsageMod) ->
error_logger:tty(false),
- start_distribution(),
+ ensure_cli_distribution(),
{ok, [[NodeStr|_]|_]} = init:get_argument(nodename),
{Command, Opts, Args} =
case ParseFun(init:get_plain_arguments(), NodeStr) of
@@ -125,9 +135,22 @@ main(ParseFun, DoFun, UsageMod) ->
rabbit_misc:quit(?EX_SOFTWARE)
end.
+start_distribution_anon(0, LastError) ->
+ {error, LastError};
+start_distribution_anon(TriesLeft, _) ->
+ NameCandidate = list_to_atom(rabbit_misc:format("rabbitmq-cli-~2..0b", [rabbit_misc:random(100)])),
+ case net_kernel:start([NameCandidate, name_type()]) of
+ {ok, _} = Result ->
+ Result;
+ {error, Reason} ->
+ start_distribution_anon(TriesLeft - 1, Reason)
+ end.
+
+%% Tries to start distribution with randonm name choosen from limited list of candidates - to
+%% prevent atom table pollution on target nodes.
start_distribution() ->
- start_distribution(list_to_atom(
- rabbit_misc:format("rabbitmq-cli-~s", [os:getpid()]))).
+ rabbit_nodes:ensure_epmd(),
+ start_distribution_anon(10, undefined).
start_distribution(Name) ->
rabbit_nodes:ensure_epmd(),