summaryrefslogtreecommitdiff
path: root/priv/templates/simplenode.nodetool
diff options
context:
space:
mode:
authorJared Morrow <jared@basho.com>2013-01-16 10:47:23 -0700
committerJared Morrow <jared@basho.com>2013-01-17 14:41:21 -0700
commitc4989f093913556355ee9f94318ca092c79de2d0 (patch)
treee1cd7e005e553d0fa570b2e43b0142f80237e9f2 /priv/templates/simplenode.nodetool
parent78fa8fc3d5215e076284b37394e5ca149e945997 (diff)
Change simplenode template files to work on more platforms
When developing Riak, we have found bugs and other issues due to the number of platforms we support. Here is an overview of the changes: - Fix command-line syntax for commands to work on *BSD / Sun - Add chkconfig and getpid to nodetool - Replace platform specific 'kill' commands with a nodetool getpid method - Fix RUNNER_USER settings to work on *BSD
Diffstat (limited to 'priv/templates/simplenode.nodetool')
-rwxr-xr-x[-rw-r--r--]priv/templates/simplenode.nodetool58
1 files changed, 52 insertions, 6 deletions
diff --git a/priv/templates/simplenode.nodetool b/priv/templates/simplenode.nodetool
index eb08fa4..54ee6d6 100644..100755
--- a/priv/templates/simplenode.nodetool
+++ b/priv/templates/simplenode.nodetool
@@ -1,3 +1,4 @@
+#!/usr/bin/env escript
%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
%% ex: ft=erlang ts=4 sw=4 et
%% -------------------------------------------------------------------
@@ -5,25 +6,53 @@
%% nodetool: Helper Script for interacting with live nodes
%%
%% -------------------------------------------------------------------
+-mode(compile).
main(Args) ->
ok = start_epmd(),
%% Extract the args
{RestArgs, TargetNode} = process_args(Args, [], undefined),
+ %% any commands that don't need a running node
+ case RestArgs of
+ ["chkconfig", File] ->
+ case file:consult(File) of
+ {ok, _} ->
+ io:format("ok\n"),
+ halt(0);
+ {error, {Line, Mod, Term}} ->
+ io:format(standard_error, ["Error on line ",
+ file:format_error({Line, Mod, Term}), "\n"], []),
+ halt(1);
+ {error, R} ->
+ io:format(standard_error, ["Error reading config file: ",
+ file:format_error(R), "\n"], []),
+ halt(1)
+ end;
+ _ ->
+ ok
+ end,
+
%% See if the node is currently running -- if it's not, we'll bail
- case {net_kernel:hidden_connect_node(TargetNode), net_adm:ping(TargetNode)} of
+ case {net_kernel:hidden_connect_node(TargetNode),
+ net_adm:ping(TargetNode)} of
{true, pong} ->
ok;
+ {false,pong} ->
+ io:format("Failed to connect to node ~p .\n", [TargetNode]),
+ halt(1);
{_, pang} ->
io:format("Node ~p not responding to pings.\n", [TargetNode]),
halt(1)
end,
case RestArgs of
+ ["getpid"] ->
+ io:format("~p\n",
+ [list_to_integer(rpc:call(TargetNode, os, getpid, []))]);
["ping"] ->
- %% If we got this far, the node already responsed to a ping, so just dump
- %% a "pong"
+ %% If we got this far, the node already responsed to a
+ %% ping, so just dump a "pong"
io:format("pong\n");
["stop"] ->
io:format("~p\n", [rpc:call(TargetNode, init, stop, [], 60000)]);
@@ -32,7 +61,9 @@ main(Args) ->
["reboot"] ->
io:format("~p\n", [rpc:call(TargetNode, init, reboot, [], 60000)]);
["rpc", Module, Function | RpcArgs] ->
- case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function),
+ case rpc:call(TargetNode,
+ list_to_atom(Module),
+ list_to_atom(Function),
[RpcArgs], 60000) of
ok ->
ok;
@@ -42,8 +73,23 @@ main(Args) ->
_ ->
halt(1)
end;
+ ["rpc_infinity", Module, Function | RpcArgs] ->
+ case rpc:call(TargetNode,
+ list_to_atom(Module),
+ list_to_atom(Function),
+ [RpcArgs], infinity) of
+ ok ->
+ ok;
+ {badrpc, Reason} ->
+ io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]),
+ halt(1);
+ _ ->
+ halt(1)
+ end;
["rpcterms", Module, Function, ArgsAsString] ->
- case rpc:call(TargetNode, list_to_atom(Module), list_to_atom(Function),
+ case rpc:call(TargetNode,
+ list_to_atom(Module),
+ list_to_atom(Function),
consult(ArgsAsString), 60000) of
{badrpc, Reason} ->
io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]),
@@ -53,7 +99,7 @@ main(Args) ->
end;
Other ->
io:format("Other: ~p\n", [Other]),
- io:format("Usage: nodetool {ping|stop|restart|reboot}\n")
+ io:format("Usage: nodetool {chkconfig|getpid|ping|stop|restart|reboot|rpc|rpc_infinity|rpcterms}\n")
end,
net_kernel:stop().