From 5fc501b3bc5ee8873d85410542a6b01bb2f27bdb Mon Sep 17 00:00:00 2001 From: Marek Majkowski Date: Fri, 4 Sep 2009 17:45:48 +0100 Subject: rabbitmqctl now accepts -nodename --- scripts/rabbitmqctl | 5 +++++ scripts/rabbitmqctl.bat | 6 +++++- src/rabbit_control.erl | 4 +++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/rabbitmqctl b/scripts/rabbitmqctl index 9c45e73d..a332afc6 100755 --- a/scripts/rabbitmqctl +++ b/scripts/rabbitmqctl @@ -30,8 +30,11 @@ ## Contributor(s): ______________________________________. ## +NODENAME=rabbit + . `dirname $0`/rabbitmq-env +[ "x" = "x$RABBITMQ_NODENAME" ] && RABBITMQ_NODENAME=${NODENAME} [ "x" = "x$RABBITMQ_CTL_ERL_ARGS" ] && RABBITMQ_CTL_ERL_ARGS=${CTL_ERL_ARGS} exec erl \ @@ -41,4 +44,6 @@ exec erl \ ${RABBITMQ_CTL_ERL_ARGS} \ -sname rabbitmqctl$$ \ -s rabbit_control \ + -nodename $RABBITMQ_NODENAME \ -extra "$@" + diff --git a/scripts/rabbitmqctl.bat b/scripts/rabbitmqctl.bat index 5111724f..8a4e5445 100755 --- a/scripts/rabbitmqctl.bat +++ b/scripts/rabbitmqctl.bat @@ -30,6 +30,10 @@ REM REM Contributor(s): ______________________________________. REM +if "%RABBITMQ_NODENAME%"=="" ( + set RABBITMQ_NODENAME=rabbit +) + if not exist "%ERLANG_HOME%\bin\erl.exe" ( echo. echo ****************************** @@ -42,4 +46,4 @@ if not exist "%ERLANG_HOME%\bin\erl.exe" ( exit /B ) -"%ERLANG_HOME%\bin\erl.exe" -pa "%~dp0..\ebin" -noinput -hidden %RABBITMQ_CTL_ERL_ARGS% -sname rabbitmqctl -s rabbit_control -extra %* +"%ERLANG_HOME%\bin\erl.exe" -pa "%~dp0..\ebin" -noinput -hidden %RABBITMQ_CTL_ERL_ARGS% -sname rabbitmqctl -s rabbit_control -nodename %RABBITMQ_NODENAME% -extra %* diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index cf20520e..5bc8ad06 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -52,10 +52,12 @@ %%---------------------------------------------------------------------------- start() -> + {ok, [[Nodenamestr|_]|_]} = init:get_argument(nodename), + Nodename = list_to_atom(Nodenamestr), FullCommand = init:get_plain_arguments(), #params{quiet = Quiet, node = Node, command = Command, args = Args} = parse_args(FullCommand, #params{quiet = false, - node = rabbit_misc:localnode(rabbit)}), + node = rabbit_misc:localnode(Nodename)}), Inform = case Quiet of true -> fun(_Format, _Args1) -> ok end; false -> fun(Format, Args1) -> -- cgit v1.2.1 From efb3b7a43cf2c044bc20233bee305f4f40c914d5 Mon Sep 17 00:00:00 2001 From: Vlad Ionescu Date: Tue, 15 Sep 2009 19:29:56 +0100 Subject: wrapping some makefile vars in ifndef's --- Makefile | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index f0702756..aef2374a 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,18 @@ ifndef TMPDIR TMPDIR := /tmp endif -RABBITMQ_NODENAME=rabbit -RABBITMQ_SERVER_START_ARGS= -RABBITMQ_MNESIA_DIR=$(TMPDIR)/rabbitmq-$(RABBITMQ_NODENAME)-mnesia -RABBITMQ_LOG_BASE=$(TMPDIR) +ifndef RABBITMQ_NODENAME +RABBITMQ_NODENAME:=rabbit +endif +ifndef RABBITMQ_SERVER_START_ARGS +RABBITMQ_SERVER_START_ARGS:= +endif +ifndef RABBITMQ_MNESIA_DIR +RABBITMQ_MNESIA_DIR:=$(TMPDIR)/rabbitmq-$(RABBITMQ_NODENAME)-mnesia +endif +ifndef RABBITMQ_LOG_BASE +RABBITMQ_LOG_BASE:=$(TMPDIR) +endif SOURCE_DIR=src EBIN_DIR=ebin -- cgit v1.2.1 From 9c5563dcee071a745a96649e3ce9e263305e1980 Mon Sep 17 00:00:00 2001 From: Vlad Ionescu Date: Tue, 22 Sep 2009 14:59:30 +0100 Subject: using ?= operator --- Makefile | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 6a2c43f0..e705b771 100644 --- a/Makefile +++ b/Makefile @@ -1,19 +1,10 @@ -ifndef TMPDIR -TMPDIR := /tmp -endif -ifndef RABBITMQ_NODENAME -RABBITMQ_NODENAME:=rabbit -endif -ifndef RABBITMQ_SERVER_START_ARGS -RABBITMQ_SERVER_START_ARGS:= -endif -ifndef RABBITMQ_MNESIA_DIR -RABBITMQ_MNESIA_DIR:=$(TMPDIR)/rabbitmq-$(RABBITMQ_NODENAME)-mnesia -endif -ifndef RABBITMQ_LOG_BASE -RABBITMQ_LOG_BASE:=$(TMPDIR) -endif +TMPDIR ?= /tmp + +RABBITMQ_NODENAME ?= rabbit +RABBITMQ_SERVER_START_ARGS ?= +RABBITMQ_MNESIA_DIR ?= $(TMPDIR)/rabbitmq-$(RABBITMQ_NODENAME)-mnesia +RABBITMQ_LOG_BASE ?= $(TMPDIR) SOURCE_DIR=src EBIN_DIR=ebin -- cgit v1.2.1 From ef4629d694f2ea810d8c7ec7ba71227a97edfca9 Mon Sep 17 00:00:00 2001 From: Paul Jones Date: Thu, 24 Sep 2009 11:09:48 +0100 Subject: Added rabbit:prepare to the generated boot file; removed call to rabbit:start when using a boot file --- scripts/rabbitmq-server | 2 +- src/rabbit.erl | 9 ++++++--- 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). -- cgit v1.2.1 From 28051995b73b90d93482eddb296d9519237bef77 Mon Sep 17 00:00:00 2001 From: Paul Jones Date: Mon, 28 Sep 2009 19:41:07 +0100 Subject: Updated boot modification code to support catching errors --- Makefile | 2 +- src/rabbit.erl | 26 ++++++++++++++----- src/rabbit_plugin_activator.erl | 56 +++++++++++++++++++++++------------------ 3 files changed, 53 insertions(+), 31 deletions(-) diff --git a/Makefile b/Makefile index 57b2a793..c98a45ba 100644 --- a/Makefile +++ b/Makefile @@ -103,7 +103,7 @@ BASIC_SCRIPT_ENVIRONMENT_SETTINGS=\ run: all $(BASIC_SCRIPT_ENVIRONMENT_SETTINGS) \ RABBITMQ_ALLOW_INPUT=true \ - RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS) -s rabbit" \ + RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)" \ ./scripts/rabbitmq-server run-node: all diff --git a/src/rabbit.erl b/src/rabbit.erl index 242b6cc7..e7baa107 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -33,7 +33,7 @@ -behaviour(application). --export([prepare/0, start/0, stop/0, stop_and_halt/0, status/0, rotate_logs/1]). +-export([boot/1, start/0, stop/0, stop_and_halt/0, status/0, rotate_logs/1]). -export([start/2, stop/1]). @@ -59,6 +59,7 @@ -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). +-spec(boot/1 :: ([atom()]) -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). -spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | {'error', any()}). -spec(status/0 :: () -> @@ -71,14 +72,27 @@ %%---------------------------------------------------------------------------- -prepare() -> - ok = ensure_working_log_handlers(), - ok = rabbit_mnesia:ensure_mnesia_dir(). +boot(Apps) -> + try + ok = ensure_working_log_handlers(), + ok = rabbit_mnesia:ensure_mnesia_dir(), + + ok = rabbit_misc:start_applications(Apps) + catch + {error, Reason} -> + io:format("Failed to start Rabbit: ~p~n", [Reason]), + halt(1); + {'EXIT', Reason} -> + io:format("Component crashed whilst starting Rabbit: ~p~n", [Reason]), + halt(1); + Unknown -> + io:format("Unknown failure type whilst starting Rabbit: ~p~n", [Unknown]), + halt(1) + end. start() -> try - prepare(), - ok = rabbit_misc:start_applications(?APPS) + rabbit:boot(?APPS) after %%give the error loggers some time to catch up timer:sleep(100) diff --git a/src/rabbit_plugin_activator.erl b/src/rabbit_plugin_activator.erl index 175e496d..c40ac114 100644 --- a/src/rabbit_plugin_activator.erl +++ b/src/rabbit_plugin_activator.erl @@ -108,6 +108,10 @@ start() -> {error, Message} -> io:format("~s~n", [Message]), halt(1) end, + case systools:script2boot(RabbitEBin ++ "/rabbit") of + ok -> ok; + error -> io:format("Failed to compile updated rabbit.script~n") + end, halt(), ok. @@ -204,31 +208,35 @@ expand_dependencies(Current, [Next|Rest]) -> 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" + ScriptFile = RootName ++ ".script", + case file:consult(ScriptFile) of + {ok, [{script, Name, Entries}]} -> + NewEntries = process_entries(Entries), + case file:open(ScriptFile, [write]) of + {ok, Fd} -> + io:format(Fd, "%% script generated at ~w ~w\n~p.\n", + [date(), time(), {script, Name, NewEntries}]), + file:close(Fd), + ok; + {error, OReason} -> + {error, {failed_to_open_boot_for_writing, OReason}} + end; + {error, Reason} -> + {error, {failed_to_load_script, Reason}} end. -process_entries([]) -> []; +process_entries([]) -> + []; process_entries([Entry = {apply,{application,start_boot,[stdlib,permanent]}}|Rest]) -> - [Entry, {apply,{rabbit,prepare,[]}}] ++ process_entries(Rest); + {Apps, RestBoot} = select_apps(Rest), + [Entry, {apply,{rabbit,boot,[Apps]}} | RestBoot]; process_entries([Entry|Rest]) -> - [Entry] ++ process_entries(Rest). + [Entry | process_entries(Rest)]. + +select_apps([]) -> + {[], []}; +select_apps([{apply,{application,start_boot,[Name,_]}}|Rest]) -> + {RestApps, RestRest} = select_apps(Rest), + {[Name|RestApps], RestRest}; +select_apps(RestEntries) -> + {[], RestEntries}. \ No newline at end of file -- cgit v1.2.1 From 33e01409deec44e18d4c47012b88884493bd3235 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Wed, 30 Sep 2009 07:13:46 +0100 Subject: fix handling of precondition_failed --- src/rabbit_channel.erl | 18 ++++++------------ src/rabbit_reader.erl | 27 ++++++++++++++++++--------- 2 files changed, 24 insertions(+), 21 deletions(-) diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl index a1fa1066..c1a5de1f 100644 --- a/src/rabbit_channel.erl +++ b/src/rabbit_channel.erl @@ -260,12 +260,6 @@ expand_routing_key_shortcut(<<>>, <<>>, expand_routing_key_shortcut(_QueueNameBin, RoutingKey, _State) -> RoutingKey. -die_precondition_failed(Fmt, Params) -> - %% FIXME: 406 should be replaced with precondition_failed when we - %% move to AMQP spec >=8.1 - rabbit_misc:protocol_error({false, 406, <<"PRECONDITION_FAILED">>}, - Fmt, Params). - %% check that an exchange/queue name does not contain the reserved %% "amq." prefix. %% @@ -610,8 +604,8 @@ handle_method(#'exchange.delete'{exchange = ExchangeNameBin, {error, not_found} -> rabbit_misc:not_found(ExchangeName); {error, in_use} -> - die_precondition_failed( - "~s in use", [rabbit_misc:rs(ExchangeName)]); + rabbit_misc:protocol_error( + precondition_failed, "~s in use", [rabbit_misc:rs(ExchangeName)]); ok -> return_ok(State, NoWait, #'exchange.delete_ok'{}) end; @@ -685,11 +679,11 @@ handle_method(#'queue.delete'{queue = QueueNameBin, QueueName, fun (Q) -> rabbit_amqqueue:delete(Q, IfUnused, IfEmpty) end) of {error, in_use} -> - die_precondition_failed( - "~s in use", [rabbit_misc:rs(QueueName)]); + rabbit_misc:protocol_error( + precondition_failed, "~s in use", [rabbit_misc:rs(QueueName)]); {error, not_empty} -> - die_precondition_failed( - "~s not empty", [rabbit_misc:rs(QueueName)]); + rabbit_misc:protocol_error( + precondition_failed, "~s not empty", [rabbit_misc:rs(QueueName)]); {ok, PurgedMessageCount} -> return_ok(State, NoWait, #'queue.delete_ok'{ diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 5cc98992..057da787 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -751,18 +751,27 @@ map_exception(Channel, Reason) -> end, {ShouldClose, CloseChannel, CloseMethod}. -lookup_amqp_exception( - #amqp_error{name = Name, explanation = Expl, method = Method}) -> +%% FIXME: this clause can go when we move to AMQP spec >=8.1 +lookup_amqp_exception(#amqp_error{name = precondition_failed, + explanation = Expl, + method = Method}) -> + ExplBin = amqp_exception_explanation(<<"PRECONDITION_FAILED">>, Expl), + {false, 406, ExplBin, Method}; +lookup_amqp_exception(#amqp_error{name = Name, + explanation = Expl, + method = Method}) -> {ShouldClose, Code, Text} = rabbit_framing:lookup_amqp_exception(Name), - ExplBin = list_to_binary(Expl), - CompleteTextBin = <>, - SafeTextBin = if size(CompleteTextBin) > 255 -> - <>; - true -> CompleteTextBin - end, - {ShouldClose, Code, SafeTextBin, Method}; + ExplBin = amqp_exception_explanation(Text, Expl), + {ShouldClose, Code, ExplBin, Method}; lookup_amqp_exception(Other) -> rabbit_log:warning("Non-AMQP exit reason '~p'~n", [Other]), {ShouldClose, Code, Text} = rabbit_framing:lookup_amqp_exception(internal_error), {ShouldClose, Code, Text, none}. + +amqp_exception_explanation(Text, Expl) -> + ExplBin = list_to_binary(Expl), + CompleteTextBin = <>, + if size(CompleteTextBin) > 255 -> <>; + true -> CompleteTextBin + end. -- cgit v1.2.1 From 5707bee986be9402d7811f51b2f3961c55165163 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Wed, 30 Sep 2009 07:21:47 +0100 Subject: cosmetic --- src/rabbit_reader.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 057da787..e21485b5 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -754,7 +754,7 @@ map_exception(Channel, Reason) -> %% FIXME: this clause can go when we move to AMQP spec >=8.1 lookup_amqp_exception(#amqp_error{name = precondition_failed, explanation = Expl, - method = Method}) -> + method = Method}) -> ExplBin = amqp_exception_explanation(<<"PRECONDITION_FAILED">>, Expl), {false, 406, ExplBin, Method}; lookup_amqp_exception(#amqp_error{name = Name, -- cgit v1.2.1 From b56806f381ac074358f17ee9ed66c0cdba44e4bb Mon Sep 17 00:00:00 2001 From: Matthew Sackman Date: Wed, 30 Sep 2009 17:34:41 +0100 Subject: cosmetic --- src/rabbit_control.erl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/rabbit_control.erl b/src/rabbit_control.erl index 5bc8ad06..3f0a6c7a 100644 --- a/src/rabbit_control.erl +++ b/src/rabbit_control.erl @@ -52,12 +52,12 @@ %%---------------------------------------------------------------------------- start() -> - {ok, [[Nodenamestr|_]|_]} = init:get_argument(nodename), - Nodename = list_to_atom(Nodenamestr), + {ok, [[NodeNameStr|_]|_]} = init:get_argument(nodename), + NodeName = list_to_atom(NodeNameStr), FullCommand = init:get_plain_arguments(), #params{quiet = Quiet, node = Node, command = Command, args = Args} = parse_args(FullCommand, #params{quiet = false, - node = rabbit_misc:localnode(Nodename)}), + node = rabbit_misc:localnode(NodeName)}), Inform = case Quiet of true -> fun(_Format, _Args1) -> ok end; false -> fun(Format, Args1) -> -- cgit v1.2.1 From 8b137ce2e4d7902021b7d1f451ac4d2bc5bb13d5 Mon Sep 17 00:00:00 2001 From: Paul Jones Date: Wed, 30 Sep 2009 19:35:24 +0100 Subject: Removed application starting changes, since these were causing a number of problems --- src/rabbit.erl | 19 ++++++------------- src/rabbit_plugin_activator.erl | 13 ++----------- 2 files changed, 8 insertions(+), 24 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index e7baa107..62672c47 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -33,7 +33,7 @@ -behaviour(application). --export([boot/1, 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]). @@ -59,7 +59,7 @@ -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). --spec(boot/1 :: ([atom()]) -> 'ok'). +-spec(prepare/0 :: () -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). -spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | {'error', any()}). -spec(status/0 :: () -> @@ -72,26 +72,19 @@ %%---------------------------------------------------------------------------- -boot(Apps) -> +prepare() -> try ok = ensure_working_log_handlers(), - ok = rabbit_mnesia:ensure_mnesia_dir(), - - ok = rabbit_misc:start_applications(Apps) + ok = rabbit_mnesia:ensure_mnesia_dir() catch {error, Reason} -> - io:format("Failed to start Rabbit: ~p~n", [Reason]), - halt(1); - {'EXIT', Reason} -> - io:format("Component crashed whilst starting Rabbit: ~p~n", [Reason]), - halt(1); - Unknown -> - io:format("Unknown failure type whilst starting Rabbit: ~p~n", [Unknown]), + io:format("Failed to prepare Rabbit: ~p~n", [Reason]), halt(1) end. start() -> try + prepare(), rabbit:boot(?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 c40ac114..c85f4b1c 100644 --- a/src/rabbit_plugin_activator.erl +++ b/src/rabbit_plugin_activator.erl @@ -228,15 +228,6 @@ include_rabbit_prepare(RootName) -> process_entries([]) -> []; process_entries([Entry = {apply,{application,start_boot,[stdlib,permanent]}}|Rest]) -> - {Apps, RestBoot} = select_apps(Rest), - [Entry, {apply,{rabbit,boot,[Apps]}} | RestBoot]; + [Entry, {apply,{rabbit,prepare,[]}} | Rest]; process_entries([Entry|Rest]) -> - [Entry | process_entries(Rest)]. - -select_apps([]) -> - {[], []}; -select_apps([{apply,{application,start_boot,[Name,_]}}|Rest]) -> - {RestApps, RestRest} = select_apps(Rest), - {[Name|RestApps], RestRest}; -select_apps(RestEntries) -> - {[], RestEntries}. \ No newline at end of file + [Entry | process_entries(Rest)]. \ No newline at end of file -- cgit v1.2.1 From 8857b55e46506c13386c3f13f6c3f3b6b942a876 Mon Sep 17 00:00:00 2001 From: Paul Jones Date: Wed, 30 Sep 2009 19:43:52 +0100 Subject: Reverted rabbit:boot to rabbit_misc:start_applications --- src/rabbit.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index 62672c47..d4542a1e 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -85,7 +85,7 @@ prepare() -> start() -> try prepare(), - rabbit:boot(?APPS) + rabbit_misc:start_applications(?APPS) after %%give the error loggers some time to catch up timer:sleep(100) -- cgit v1.2.1 From d1b33ecf9a708b4d09cac871f471d6b58c90f1c3 Mon Sep 17 00:00:00 2001 From: Matthias Radestock Date: Wed, 30 Sep 2009 21:26:56 +0100 Subject: leave error reporting in rabbit:prepare to context also: - tabs->spaces - a few cosmetic changes - extract error handling & termination in rabbit_plugin_activator --- src/rabbit.erl | 16 +++---- src/rabbit_plugin_activator.erl | 93 ++++++++++++++++++++++------------------- 2 files changed, 54 insertions(+), 55 deletions(-) diff --git a/src/rabbit.erl b/src/rabbit.erl index d4542a1e..cac64cb4 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -57,9 +57,9 @@ -type(log_location() :: 'tty' | 'undefined' | string()). -type(file_suffix() :: binary()). +-spec(prepare/0 :: () -> 'ok'). -spec(start/0 :: () -> 'ok'). -spec(stop/0 :: () -> 'ok'). --spec(prepare/0 :: () -> 'ok'). -spec(stop_and_halt/0 :: () -> 'ok'). -spec(rotate_logs/1 :: (file_suffix()) -> 'ok' | {'error', any()}). -spec(status/0 :: () -> @@ -73,19 +73,13 @@ %%---------------------------------------------------------------------------- prepare() -> - try - ok = ensure_working_log_handlers(), - ok = rabbit_mnesia:ensure_mnesia_dir() - catch - {error, Reason} -> - io:format("Failed to prepare Rabbit: ~p~n", [Reason]), - halt(1) - end. + ok = ensure_working_log_handlers(), + ok = rabbit_mnesia:ensure_mnesia_dir(). start() -> try - prepare(), - rabbit_misc:start_applications(?APPS) + ok = prepare(), + ok = rabbit_misc:start_applications(?APPS) after %%give the error loggers some time to catch up timer:sleep(100) diff --git a/src/rabbit_plugin_activator.erl b/src/rabbit_plugin_activator.erl index c85f4b1c..f28c4a6e 100644 --- a/src/rabbit_plugin_activator.erl +++ b/src/rabbit_plugin_activator.erl @@ -49,6 +49,8 @@ start() -> UnpackedPluginDir = get_env(plugins_expand_dir, ?DefaultUnpackedPluginDir), RabbitEBin = get_env(rabbit_ebin, ?DefaultRabbitEBin), + RootName = RabbitEBin ++ "/rabbit", + %% Unpack any .ez plugins unpack_ez_plugins(PluginDir, UnpackedPluginDir), @@ -60,10 +62,8 @@ start() -> %% Build the entire set of dependencies - this will load the %% applications along the way AllApps = case catch sets:to_list(expand_dependencies(RequiredApps)) of - {unknown_app, {App, Err}} -> - io:format("ERROR: Failed to load application " ++ - "~s: ~p~n", [App, Err]), - halt(1); + {failed_to_load_app, App, Err} -> + error("failed to load application ~s: ~p", [App, Err]); AppList -> AppList end, @@ -77,11 +77,11 @@ start() -> AppVersions}, %% Write it out to ebin/rabbit.rel - file:write_file(RabbitEBin ++ "/rabbit.rel", - io_lib:format("~p.~n", [RDesc])), + file:write_file(RootName ++ ".rel", io_lib:format("~p.~n", [RDesc])), %% Compile the script - case systools:make_script(RabbitEBin ++ "/rabbit", [local, silent]) of + ScriptFile = RootName ++ ".script", + case systools:make_script(RootName, [local, silent]) of {ok, Module, Warnings} -> %% This gets lots of spurious no-source warnings when we %% have .ez files, so we want to supress them to prevent @@ -98,20 +98,20 @@ start() -> end, ok; {error, Module, Error} -> - io:format("Boot file generation failed: ~s~n", - [Module:format_error(Error)]), - halt(1) + error("generation of boot script file ~s failed: ~w", + [ScriptFile, Module:format_error(Error)]) end, - case catch include_rabbit_prepare(RabbitEBin ++ "/rabbit") of + case post_process_script(ScriptFile) of ok -> ok; - {error, Message} -> io:format("~s~n", [Message]), - halt(1) + {error, Reason} -> + error("post processing of boot script file ~s failed: ~w", + [ScriptFile, Reason]) + end, + case systools:script2boot(RootName) of + ok -> ok; + error -> error("failed to compile boot script file ~s", [ScriptFile]) end, - case systools:script2boot(RabbitEBin ++ "/rabbit") of - ok -> ok; - error -> io:format("Failed to compile updated rabbit.script~n") - end, halt(), ok. @@ -132,10 +132,10 @@ determine_version(App) -> assert_dir(Dir) -> case filelib:is_dir(Dir) of true -> ok; - false -> - ok = filelib:ensure_dir(Dir), - ok = file:make_dir(Dir) + false -> ok = filelib:ensure_dir(Dir), + ok = file:make_dir(Dir) end. + delete_dir(Dir) -> case filelib:is_dir(Dir) of true -> @@ -153,6 +153,7 @@ delete_dir(Dir) -> false -> ok end. + is_symlink(Name) -> case file:read_link(Name) of {ok, _} -> true; @@ -195,39 +196,43 @@ expand_dependencies(Current, [Next|Rest]) -> expand_dependencies(Current, Rest); false -> case application:load(Next) of - ok -> + ok -> ok; - {error, {already_loaded, _}} -> + {error, {already_loaded, _}} -> ok; - X -> - throw({unknown_app, {Next, X}}) + {error, Reason} -> + throw({failed_to_load_app, Next, Reason}) end, {ok, Required} = application:get_key(Next, applications), 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", - case file:consult(ScriptFile) of - {ok, [{script, Name, Entries}]} -> - NewEntries = process_entries(Entries), - case file:open(ScriptFile, [write]) of - {ok, Fd} -> - io:format(Fd, "%% script generated at ~w ~w\n~p.\n", - [date(), time(), {script, Name, NewEntries}]), - file:close(Fd), - ok; - {error, OReason} -> - {error, {failed_to_open_boot_for_writing, OReason}} - end; - {error, Reason} -> - {error, {failed_to_load_script, Reason}} +post_process_script(ScriptFile) -> + case file:consult(ScriptFile) of + {ok, [{script, Name, Entries}]} -> + NewEntries = process_entries(Entries), + case file:open(ScriptFile, [write]) of + {ok, Fd} -> + io:format(Fd, "%% script generated at ~w ~w~n~p.~n", + [date(), time(), {script, Name, NewEntries}]), + file:close(Fd), + ok; + {error, OReason} -> + {error, {failed_to_open_script_file_for_writing, OReason}} + end; + {error, Reason} -> + {error, {failed_to_load_script, Reason}} end. process_entries([]) -> - []; -process_entries([Entry = {apply,{application,start_boot,[stdlib,permanent]}}|Rest]) -> - [Entry, {apply,{rabbit,prepare,[]}} | Rest]; + []; +process_entries([Entry = {apply,{application,start_boot,[stdlib,permanent]}} | + Rest]) -> + [Entry, {apply,{rabbit,prepare,[]}} | Rest]; process_entries([Entry|Rest]) -> - [Entry | process_entries(Rest)]. \ No newline at end of file + [Entry | process_entries(Rest)]. + +error(Fmt, Args) -> + io:format("ERROR: " ++ Fmt ++ "~n", Args), + halt(1). -- cgit v1.2.1