diff options
author | Emile Joubert <emile@rabbitmq.com> | 2010-12-01 12:32:52 +0000 |
---|---|---|
committer | Emile Joubert <emile@rabbitmq.com> | 2010-12-01 12:32:52 +0000 |
commit | 0296a452b916f8ec93e5893fda5dd66e8b4930d3 (patch) | |
tree | 62bd3c04b5adf6deea6099281051eea5afbee146 | |
parent | bd06292f54f8cd0475005236968b688aab537687 (diff) | |
download | rabbitmq-server-0296a452b916f8ec93e5893fda5dd66e8b4930d3.tar.gz |
Diagnostics on node start failure
-rw-r--r-- | src/rabbit_control.erl | 41 | ||||
-rw-r--r-- | src/rabbit_prelaunch.erl | 11 |
2 files changed, 31 insertions, 21 deletions
diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index 72b77b1f..360217a2 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -32,7 +32,7 @@ -module(rabbit_control). -include("rabbit.hrl"). --export([start/0, stop/0, action/5]). +-export([start/0, stop/0, action/5, diagnostics/1]). -define(RPC_TIMEOUT, infinity). @@ -50,6 +50,7 @@ (atom(), node(), [string()], [{string(), any()}], fun ((string(), [any()]) -> 'ok')) -> 'ok'). +-spec(diagnostics/1 :: (node()) -> [{string(), [any()]}]). -spec(usage/0 :: () -> no_return()). -endif. @@ -116,24 +117,28 @@ fmt_stderr(Format, Args) -> rabbit_misc:format_stderr(Format ++ "~n", Args). print_error(Format, Args) -> fmt_stderr("Error: " ++ Format, Args). print_badrpc_diagnostics(Node) -> - fmt_stderr("diagnostics:", []), + [fmt_stderr(Fmt, Args) || {Fmt, Args} <- diagnostics(Node)]. + +diagnostics(Node) -> {_NodeName, NodeHost} = rabbit_misc:nodeparts(Node), - case net_adm:names(NodeHost) of - {error, EpmdReason} -> - fmt_stderr("- unable to connect to epmd on ~s: ~w", - [NodeHost, EpmdReason]); - {ok, NamePorts} -> - fmt_stderr("- nodes and their ports on ~s: ~p", - [NodeHost, [{list_to_atom(Name), Port} || - {Name, Port} <- NamePorts]]) - end, - fmt_stderr("- current node: ~w", [node()]), - case init:get_argument(home) of - {ok, [[Home]]} -> fmt_stderr("- current node home dir: ~s", [Home]); - Other -> fmt_stderr("- no current node home dir: ~p", [Other]) - end, - fmt_stderr("- current node cookie hash: ~s", [rabbit_misc:cookie_hash()]), - ok. + [ + {"diagnostics:", []}, + case net_adm:names(NodeHost) of + {error, EpmdReason} -> + {"- unable to connect to epmd on ~s: ~w", + [NodeHost, EpmdReason]}; + {ok, NamePorts} -> + {"- nodes and their ports on ~s: ~p", + [NodeHost, [{list_to_atom(Name), Port} || + {Name, Port} <- NamePorts]]} + end, + {"- current node: ~w", [node()]}, + case init:get_argument(home) of + {ok, [[Home]]} -> {"- current node home dir: ~s", [Home]}; + Other -> {"- no current node home dir: ~p", [Other]} + end, + {"- current node cookie hash: ~s", [rabbit_misc:cookie_hash()]} + ]. stop() -> ok. diff --git a/src/rabbit_prelaunch.erl b/src/rabbit_prelaunch.erl index 59d8efd4..b37573dd 100644 --- a/src/rabbit_prelaunch.erl +++ b/src/rabbit_prelaunch.erl @@ -130,12 +130,17 @@ start() -> [io:format("* ~s-~s~n", [App, proplists:get_value(App, AppVersions)]) || App <- PluginApps], io:nl(), + + % check whether it is possible to start a node with the requested nodename case net_kernel:start([list_to_atom(NodeName), shortnames]) of {ok, _Pid} -> ok = net_kernel:stop(); {error, Result} -> - terminate("starting node with name ~p failed - " - "an instance with the same name may already be running~n~p~n", - [NodeName, Result]) + io:format("starting node with name ~p failed. " + "(is RabbitMQ already running?)~n~p~n", + [NodeName, Result]), + [io:format(Fmt ++ "~n", Args) || + {Fmt, Args} <- rabbit_control:diagnostics(NodeName)], + halt(1) end, halt(), ok. |