summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Jones <paulj@lshift.net>2009-09-24 11:09:48 +0100
committerPaul Jones <paulj@lshift.net>2009-09-24 11:09:48 +0100
commitef4629d694f2ea810d8c7ec7ba71227a97edfca9 (patch)
treee8c05c0ec9e87b5c773ef249e88aa5c7da38d1e5
parent3409706e6f757f8843a34ecf0f3f125084660e90 (diff)
downloadrabbitmq-server-ef4629d694f2ea810d8c7ec7ba71227a97edfca9.tar.gz
Added rabbit:prepare to the generated boot file; removed call to rabbit:start when using a boot file
-rwxr-xr-xscripts/rabbitmq-server2
-rw-r--r--src/rabbit.erl9
-rw-r--r--src/rabbit_plugin_activator.erl36
3 files changed, 43 insertions, 4 deletions
diff --git a/scripts/rabbitmq-server b/scripts/rabbitmq-server
index e5317bb1..7a257834 100755
--- a/scripts/rabbitmq-server
+++ b/scripts/rabbitmq-server
@@ -74,7 +74,6 @@ fi
RABBITMQ_START_RABBIT=
[ "x" = "x$RABBITMQ_ALLOW_INPUT" ] && RABBITMQ_START_RABBIT='-noinput'
-[ "x" = "x$RABBITMQ_NODE_ONLY" ] && RABBITMQ_START_RABBIT="${RABBITMQ_START_RABBIT} -s rabbit"
RABBITMQ_EBIN_ROOT="${RABBITMQ_HOME}/ebin"
if [ -f "${RABBITMQ_EBIN_ROOT}/rabbit.boot" ] && [ "x" = "x$RABBITMQ_NODE_ONLY" ]; then
@@ -83,6 +82,7 @@ if [ -f "${RABBITMQ_EBIN_ROOT}/rabbit.boot" ] && [ "x" = "x$RABBITMQ_NODE_ONLY"
else
RABBITMQ_BOOT_FILE=start_sasl
RABBITMQ_EBIN_PATH="-pa ${RABBITMQ_EBIN_ROOT}"
+ [ "x" = "x$RABBITMQ_NODE_ONLY" ] && RABBITMQ_START_RABBIT="${RABBITMQ_START_RABBIT} -s rabbit"
fi
# we need to turn off path expansion because some of the vars, notably
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 27f085c2..242b6cc7 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -33,7 +33,7 @@
-behaviour(application).
--export([start/0, stop/0, stop_and_halt/0, status/0, rotate_logs/1]).
+-export([prepare/0, start/0, stop/0, stop_and_halt/0, status/0, rotate_logs/1]).
-export([start/2, stop/1]).
@@ -71,10 +71,13 @@
%%----------------------------------------------------------------------------
+prepare() ->
+ ok = ensure_working_log_handlers(),
+ ok = rabbit_mnesia:ensure_mnesia_dir().
+
start() ->
try
- ok = ensure_working_log_handlers(),
- ok = rabbit_mnesia:ensure_mnesia_dir(),
+ prepare(),
ok = rabbit_misc:start_applications(?APPS)
after
%%give the error loggers some time to catch up
diff --git a/src/rabbit_plugin_activator.erl b/src/rabbit_plugin_activator.erl
index 0206f73e..175e496d 100644
--- a/src/rabbit_plugin_activator.erl
+++ b/src/rabbit_plugin_activator.erl
@@ -102,6 +102,12 @@ start() ->
[Module:format_error(Error)]),
halt(1)
end,
+
+ case catch include_rabbit_prepare(RabbitEBin ++ "/rabbit") of
+ ok -> ok;
+ {error, Message} -> io:format("~s~n", [Message]),
+ halt(1)
+ end,
halt(),
ok.
@@ -196,3 +202,33 @@ expand_dependencies(Current, [Next|Rest]) ->
Unique = [A || A <- Required, not(sets:is_element(A, Current))],
expand_dependencies(sets:add_element(Next, Current), Rest ++ Unique)
end.
+
+include_rabbit_prepare(RootName) ->
+ ScriptFile = RootName ++ ".script",
+ {SName, SNewEntries} = case file:consult(RootName ++ ".script") of
+ {ok, [{script, Name, Entries}]} ->
+ NewEntries = process_entries(Entries),
+ {Name, NewEntries};
+ {error, Reason} ->
+ throw({error, io_lib:format("Failed to load script: ~p", [Reason])})
+ end,
+
+ case file:open(ScriptFile, [write]) of
+ {ok, Fd} ->
+ io:format(Fd, "%% script generated at ~w ~w\n~p.\n",
+ [date(), time(), {script, SName, SNewEntries}]),
+ file:close(Fd),
+ ok;
+ {error, OReason} ->
+ throw({error, io_lib:format("Failed to open script file for writing - ~p", [OReason])})
+ end,
+ case systools:script2boot(RootName) of
+ ok -> ok;
+ error -> "Failed to compile script file to boot file"
+ end.
+
+process_entries([]) -> [];
+process_entries([Entry = {apply,{application,start_boot,[stdlib,permanent]}}|Rest]) ->
+ [Entry, {apply,{rabbit,prepare,[]}}] ++ process_entries(Rest);
+process_entries([Entry|Rest]) ->
+ [Entry] ++ process_entries(Rest).