diff options
author | Paul Jones <paulj@lshift.net> | 2009-09-24 11:09:48 +0100 |
---|---|---|
committer | Paul Jones <paulj@lshift.net> | 2009-09-24 11:09:48 +0100 |
commit | ef4629d694f2ea810d8c7ec7ba71227a97edfca9 (patch) | |
tree | e8c05c0ec9e87b5c773ef249e88aa5c7da38d1e5 | |
parent | 3409706e6f757f8843a34ecf0f3f125084660e90 (diff) | |
download | rabbitmq-server-ef4629d694f2ea810d8c7ec7ba71227a97edfca9.tar.gz |
Added rabbit:prepare to the generated boot file; removed call to rabbit:start when using a boot file
-rwxr-xr-x | scripts/rabbitmq-server | 2 | ||||
-rw-r--r-- | src/rabbit.erl | 9 | ||||
-rw-r--r-- | src/rabbit_plugin_activator.erl | 36 |
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). |