couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rnew...@apache.org
Subject [01/10] Import rebar
Date Mon, 16 Dec 2013 16:48:58 GMT
Updated Branches:
  refs/heads/1843-feature-bigcouch cba2e813b -> 938fc0116


http://git-wip-us.apache.org/repos/asf/couchdb/blob/626455a4/src/rebar/test/upgrade_project/rel/files/nodetool
----------------------------------------------------------------------
diff --git a/src/rebar/test/upgrade_project/rel/files/nodetool b/src/rebar/test/upgrade_project/rel/files/nodetool
new file mode 100644
index 0000000..ce06c6a
--- /dev/null
+++ b/src/rebar/test/upgrade_project/rel/files/nodetool
@@ -0,0 +1,182 @@
+#!/usr/bin/env escript
+%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*-
+%% ex: ft=erlang ts=4 sw=4 et
+%% -------------------------------------------------------------------
+%%
+%% nodetool: Helper Script for interacting with live nodes
+%%
+%% -------------------------------------------------------------------
+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
+        {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"
+            io:format("pong\n");
+        ["stop"] ->
+            io:format("~p\n", [rpc:call(TargetNode, init, stop, [], 60000)]);
+        ["restart"] ->
+            io:format("~p\n", [rpc:call(TargetNode, init, restart, [], 60000)]);
+        ["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),
+                          [RpcArgs], 60000) of
+                ok ->
+                    ok;
+                {badrpc, Reason} ->
+                    io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]),
+                    halt(1);
+                _ ->
+                    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),
+                          consult(ArgsAsString), 60000) of
+                {badrpc, Reason} ->
+                    io:format("RPC to ~p failed: ~p\n", [TargetNode, Reason]),
+                    halt(1);
+                Other ->
+                    io:format("~p\n", [Other])
+            end;
+        Other ->
+            io:format("Other: ~p\n", [Other]),
+            io:format("Usage: nodetool {chkconfig|getpid|ping|stop|restart|reboot|rpc|rpc_infinity|rpcterms}\n")
+    end,
+    net_kernel:stop().
+
+process_args([], Acc, TargetNode) ->
+    {lists:reverse(Acc), TargetNode};
+process_args(["-setcookie", Cookie | Rest], Acc, TargetNode) ->
+    erlang:set_cookie(node(), list_to_atom(Cookie)),
+    process_args(Rest, Acc, TargetNode);
+process_args(["-name", TargetName | Rest], Acc, _) ->
+    ThisNode = append_node_suffix(TargetName, "_maint_"),
+    {ok, _} = net_kernel:start([ThisNode, longnames]),
+    process_args(Rest, Acc, nodename(TargetName));
+process_args(["-sname", TargetName | Rest], Acc, _) ->
+    ThisNode = append_node_suffix(TargetName, "_maint_"),
+    {ok, _} = net_kernel:start([ThisNode, shortnames]),
+    process_args(Rest, Acc, nodename(TargetName));
+process_args([Arg | Rest], Acc, Opts) ->
+    process_args(Rest, [Arg | Acc], Opts).
+
+
+start_epmd() ->
+    [] = os:cmd(epmd_path() ++ " -daemon"),
+    ok.
+
+epmd_path() ->
+    ErtsBinDir = filename:dirname(escript:script_name()),
+    Name = "epmd",
+    case os:find_executable(Name, ErtsBinDir) of
+        false ->
+            case os:find_executable(Name) of
+                false ->
+                    io:format("Could not find epmd.~n"),
+                    halt(1);
+                GlobalEpmd ->
+                    GlobalEpmd
+            end;
+        Epmd ->
+            Epmd
+    end.
+
+
+nodename(Name) ->
+    case string:tokens(Name, "@") of
+        [_Node, _Host] ->
+            list_to_atom(Name);
+        [Node] ->
+            [_, Host] = string:tokens(atom_to_list(node()), "@"),
+            list_to_atom(lists:concat([Node, "@", Host]))
+    end.
+
+append_node_suffix(Name, Suffix) ->
+    case string:tokens(Name, "@") of
+        [Node, Host] ->
+            list_to_atom(lists:concat([Node, Suffix, os:getpid(), "@", Host]));
+        [Node] ->
+            list_to_atom(lists:concat([Node, Suffix, os:getpid()]))
+    end.
+
+
+%%
+%% Given a string or binary, parse it into a list of terms, ala file:consult/0
+%%
+consult(Str) when is_list(Str) ->
+    consult([], Str, []);
+consult(Bin) when is_binary(Bin)->
+    consult([], binary_to_list(Bin), []).
+
+consult(Cont, Str, Acc) ->
+    case erl_scan:tokens(Cont, Str, 0) of
+        {done, Result, Remaining} ->
+            case Result of
+                {ok, Tokens, _} ->
+                    {ok, Term} = erl_parse:parse_term(Tokens),
+                    consult([], Remaining, [Term | Acc]);
+                {eof, _Other} ->
+                    lists:reverse(Acc);
+                {error, Info, _} ->
+                    {error, Info}
+            end;
+        {more, Cont1} ->
+            consult(Cont1, eof, Acc)
+    end.

http://git-wip-us.apache.org/repos/asf/couchdb/blob/626455a4/src/rebar/test/upgrade_project/rel/files/sys.config
----------------------------------------------------------------------
diff --git a/src/rebar/test/upgrade_project/rel/files/sys.config b/src/rebar/test/upgrade_project/rel/files/sys.config
new file mode 100644
index 0000000..3b7f6bd
--- /dev/null
+++ b/src/rebar/test/upgrade_project/rel/files/sys.config
@@ -0,0 +1,11 @@
+[
+ %% SASL config
+ {sasl, [
+         {sasl_error_logger, {file, "log/sasl-error.log"}},
+         {errlog_type, error},
+         {error_logger_mf_dir, "log/sasl"},      % Log directory
+         {error_logger_mf_maxbytes, 10485760},   % 10 MB max file size
+         {error_logger_mf_maxfiles, 5}           % 5 files max
+        ]}
+].
+

http://git-wip-us.apache.org/repos/asf/couchdb/blob/626455a4/src/rebar/test/upgrade_project/rel/files/vm.args
----------------------------------------------------------------------
diff --git a/src/rebar/test/upgrade_project/rel/files/vm.args b/src/rebar/test/upgrade_project/rel/files/vm.args
new file mode 100644
index 0000000..a9aeb64
--- /dev/null
+++ b/src/rebar/test/upgrade_project/rel/files/vm.args
@@ -0,0 +1,19 @@
+## Name of the node
+-name dummy@127.0.0.1
+
+## Cookie for distributed erlang
+-setcookie dummy
+
+## Heartbeat management; auto-restarts VM if it dies or becomes unresponsive
+## (Disabled by default..use with caution!)
+##-heart
+
+## Enable kernel poll and a few async threads
+##+K true
+##+A 5
+
+## Increase number of concurrent ports/sockets
+##-env ERL_MAX_PORTS 4096
+
+## Tweak GC to run more often
+##-env ERL_FULLSWEEP_AFTER 10

http://git-wip-us.apache.org/repos/asf/couchdb/blob/626455a4/src/rebar/test/upgrade_project/rel/reltool.config
----------------------------------------------------------------------
diff --git a/src/rebar/test/upgrade_project/rel/reltool.config b/src/rebar/test/upgrade_project/rel/reltool.config
new file mode 100644
index 0000000..b691c77
--- /dev/null
+++ b/src/rebar/test/upgrade_project/rel/reltool.config
@@ -0,0 +1,27 @@
+{sys, [
+    {lib_dirs, ["../apps"]},
+    {rel, "dummy", "0.1", [
+        kernel,
+        stdlib,
+        sasl,
+        dummy
+    ]},
+    {rel, "start_clean", "", [kernel, stdlib]},
+    {boot_rel, "dummy"},
+    {profile, embedded},
+    {excl_sys_filters, ["^bin/.*", "^erts.*/bin/(dialyzer|typer)"]},
+    {excl_archive_filters, [".*"]},
+
+    {app, hipe, [{incl_cond, exclude}]},
+
+    {app, dummy, [{incl_cond, include}]}
+]}.
+
+{overlay, [
+          {mkdir, "log/sasl"},
+          {copy, "files/erl", "{{erts_vsn}}/bin/erl"},
+          {copy, "files/nodetool", "{{erts_vsn}}/bin/nodetool"},
+          {copy, "files/dummy", "bin/dummy"},
+          {copy, "files/sys.config", "releases/\{\{rel_vsn\}\}/sys.config"},
+          {copy, "files/vm.args", "releases/\{\{rel_vsn\}\}/vm.args"}
+          ]}.


Mime
View raw message