diff options
| author | Michael Klishin <michael@novemberain.com> | 2016-01-14 23:48:40 +0300 |
|---|---|---|
| committer | Michael Klishin <michael@novemberain.com> | 2016-01-14 23:48:40 +0300 |
| commit | d54c06ab2ffd82f6f4d1edb19fd646b84f07ba0e (patch) | |
| tree | 45aefe1000777a98b93064cbcb36a3aa9b9fe6ad /src | |
| parent | 86db8bccc9530e40105a0969e3c0fd09c82fc93d (diff) | |
| parent | 5eeed4886c1b52f9f92158720813749b5f868325 (diff) | |
| download | rabbitmq-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.erl | 29 |
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(), |
