diff options
author | Matthias Radestock <matthias@lshift.net> | 2009-12-01 11:20:31 +0000 |
---|---|---|
committer | Matthias Radestock <matthias@lshift.net> | 2009-12-01 11:20:31 +0000 |
commit | 2e8a7b5b0032ceb80349d470e4850a176caa7414 (patch) | |
tree | 8ce3950dcd270af07ad2b77777a4a99cbb9f78c2 | |
parent | beae0e9fba54b3a7cd07d8f66c4b3e1fe663ea3d (diff) | |
download | rabbitmq-server-2e8a7b5b0032ceb80349d470e4850a176caa7414.tar.gz |
two bug fixes and some refactoring
- the IP address in the config is meant to be a string, not an atom
- special case node name of first node
-rw-r--r-- | src/rabbit_multi.erl | 50 |
1 files changed, 23 insertions, 27 deletions
diff --git a/src/rabbit_multi.erl b/src/rabbit_multi.erl index 7f53e2df..94150a5d 100644 --- a/src/rabbit_multi.erl +++ b/src/rabbit_multi.erl @@ -100,13 +100,15 @@ Available commands: action(start_all, [NodeCount], RpcTimeout) -> io:format("Starting all nodes...~n", []), application:load(rabbit), - N = list_to_integer(NodeCount), + NodeName = rabbit_misc:nodeparts(getenv("RABBITMQ_NODENAME")), {NodePids, Running} = - start_nodes(N, N, [], true, - rabbit_misc:nodeparts( - getenv("RABBITMQ_NODENAME")), - get_node_tcp_listener(1 == N), - RpcTimeout), + case list_to_integer(NodeCount) of + 1 -> {NodePid, Started} = start_node(rabbit_misc:makenode(NodeName), + RpcTimeout), + {[NodePid], Started}; + N -> start_nodes(N, N, [], true, NodeName, + get_node_tcp_listener(), RpcTimeout) + end, write_pids_file(NodePids), case Running of true -> ok; @@ -159,30 +161,26 @@ action(rotate_logs, [Suffix], RpcTimeout) -> %% Running is a boolean exhibiting success at some moment start_nodes(0, _, PNodePid, Running, _, _, _) -> {PNodePid, Running}; -start_nodes(1, 1, [], true, NodeName, NodeListen, RpcTimeout) -> - {NodePid, Started} = start_single_node(rabbit_misc:makenode(NodeName), - RpcTimeout), - start_nodes(0, 1, [NodePid], Started, NodeName, NodeListen, RpcTimeout); - start_nodes(N, Total, PNodePid, Running, NodeNameBase, {NodeIpAddress, NodePortBase}, RpcTimeout) -> {NodePre, NodeSuff} = NodeNameBase, NodeNumber = Total - N, - NodePre1 = NodePre ++ "_" ++ integer_to_list(NodeNumber), - {NodePid, Started} = start_node(rabbit_misc:makenode({NodePre1, NodeSuff}), - {NodeIpAddress, NodePortBase + NodeNumber}, - RpcTimeout), + NodePre1 = case NodeNumber of + %% For compatibility with running a single node + 0 -> NodePre; + _ -> NodePre ++ "_" ++ integer_to_list(NodeNumber) + end, + Node = rabbit_misc:makenode({NodePre1, NodeSuff}), + NodePort = NodePortBase + NodeNumber, + os:putenv("RABBITMQ_NODENAME", atom_to_list(Node)), + os:putenv("RABBITMQ_NODE_PORT", integer_to_list(NodePort)), + os:putenv("RABBITMQ_NODE_IP_ADDRESS", NodeIpAddress), + {NodePid, Started} = start_node(Node, RpcTimeout), start_nodes(N - 1, Total, [NodePid | PNodePid], Started and Running, NodeNameBase, {NodeIpAddress, NodePortBase}, RpcTimeout). -start_node(Node, {NodeIpAddress, NodePort}, RpcTimeout) -> - os:putenv("RABBITMQ_NODENAME", atom_to_list(Node)), - os:putenv("RABBITMQ_NODE_PORT", integer_to_list(NodePort)), - os:putenv("RABBITMQ_NODE_IP_ADDRESS", atom_to_list(NodeIpAddress)), - start_single_node(Node, RpcTimeout). - -start_single_node(Node, RpcTimeout) -> +start_node(Node, RpcTimeout) -> io:format("Starting node ~s...~n", [Node]), case rpc:call(Node, os, getpid, []) of {badrpc, _} -> @@ -298,7 +296,7 @@ kill_wait(Pid, TimeLeft, Forceful) -> io:format(".", []), is_dead(Pid) orelse kill_wait(Pid, TimeLeft - ?RPC_SLEEP, Forceful). -% Test using some OS clunkiness since we shouldn't trust +% Test using some OS clunkiness since we shouldn't trust % rpc:call(os, getpid, []) at this point is_dead(Pid) -> PidS = integer_to_list(Pid), @@ -327,16 +325,14 @@ getenv(Var) -> Value -> Value end. -get_node_tcp_listener(OneNode) -> +get_node_tcp_listener() -> try - {list_to_atom(getenv("RABBITMQ_NODE_IP_ADDRESS")), + {getenv("RABBITMQ_NODE_IP_ADDRESS"), list_to_integer(getenv("RABBITMQ_NODE_PORT"))} catch _ -> case application:get_env(rabbit, tcp_listeners) of {ok, [{_IpAddy, _Port} = Listener]} -> Listener; - {ok, _Other} when OneNode -> - it_matters_not; {ok, Other} -> throw({cannot_start_multiple_nodes, multiple_tcp_listeners, Other}); |