diff options
| author | Tim Watson <tim@rabbitmq.com> | 2012-05-04 12:28:27 +0100 |
|---|---|---|
| committer | Tim Watson <tim@rabbitmq.com> | 2012-05-04 12:28:27 +0100 |
| commit | 45477ebe03ab3cf7a11da7e46b211b79eedbef2b (patch) | |
| tree | 644b455701d3e4118b40c231884b99e484dfbc0d | |
| parent | 9a3b945490bcb628a2e4b85cbbca8e00b8f62a89 (diff) | |
| download | rabbitmq-server-git-45477ebe03ab3cf7a11da7e46b211b79eedbef2b.tar.gz | |
move application lifecycle (loading) into one place - rabbit_misc
| -rw-r--r-- | src/rabbit.erl | 37 | ||||
| -rw-r--r-- | src/rabbit_misc.erl | 38 |
2 files changed, 34 insertions, 41 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index 87526aaede..588cc39013 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -308,11 +308,9 @@ start_cold() -> Plugins = rabbit_plugins:bootstrap_envinronment(), ToBeLoaded = Plugins ++ ?APPS, - io:format("~n" - "Activating RabbitMQ plugins ...~n"), - io:format("Plugins: ~p~n", [Plugins]), + io:format("~nActivating RabbitMQ plugins ...~n"), - load_applications(queue:from_list(ToBeLoaded), sets:new()), + ok = rabbit_misc:load_applications(ToBeLoaded), StartupApps = rabbit_misc:calculate_app_dependency_ordering(ToBeLoaded), ok = rabbit_misc:start_applications(StartupApps), @@ -417,38 +415,9 @@ stop(_State) -> %% application life cycle application_load_order() -> - ok = load_applications(), + ok = rabbit_misc:load_applications(?APPS), rabbit_misc:calculate_app_dependency_ordering(?APPS). -load_applications() -> - load_applications(queue:from_list(?APPS), sets:new()). - -%% FIXME: should we move this into rabbit_misc? -load_applications(Worklist, Loaded) -> - case queue:out(Worklist) of - {empty, _WorkList} -> - ok; - {{value, App}, Worklist1} -> - case sets:is_element(App, Loaded) of - true -> load_applications(Worklist1, Loaded); - false -> case application:load(App) of - ok -> ok; - {error, {already_loaded, App}} -> ok; - Error -> throw(Error) - end, - load_applications( - queue:join(Worklist1, - queue:from_list(app_dependencies(App))), - sets:add_element(App, Loaded)) - end - end. - -app_dependencies(App) -> - case application:get_key(App, applications) of - undefined -> []; - {ok, Lst} -> Lst - end. - %%--------------------------------------------------------------------------- %% boot step logic diff --git a/src/rabbit_misc.erl b/src/rabbit_misc.erl index 2fffc2cdab..87865ebc31 100644 --- a/src/rabbit_misc.erl +++ b/src/rabbit_misc.erl @@ -42,7 +42,7 @@ -export([dirty_read_all/1, dirty_foreach_key/2, dirty_dump_log/1]). -export([format/2, format_many/1, format_stderr/2]). -export([with_local_io/1, local_info_msg/2]). --export([calculate_app_dependency_ordering/1, +-export([calculate_app_dependency_ordering/1, load_applications/1, start_applications/1, stop_applications/1]). -export([unfold/2, ceil/1, queue_fold/3]). -export([sort_field_table/1]). @@ -170,6 +170,7 @@ -spec(with_local_io/1 :: (fun (() -> A)) -> A). -spec(local_info_msg/2 :: (string(), [any()]) -> 'ok'). -spec(start_applications/1 :: ([atom()]) -> 'ok'). +-spec(load_applications/1 :: ([atom()]) -> 'ok'). -spec(calculate_app_dependency_ordering/1 :: ([atom()]) -> 'ok'). -spec(stop_applications/1 :: ([atom()]) -> 'ok'). -spec(unfold/2 :: (fun ((A) -> ({'true', B, A} | 'false')), A) -> {[B], A}). @@ -623,6 +624,35 @@ manage_applications(Iterate, Do, Undo, SkipError, ErrorTag, Apps) -> end, [], Apps), ok. +load_applications(Apps) -> + load_applications(queue:from_list(Apps), sets:new()), + ok. + +load_applications(Worklist, Loaded) -> + case queue:out(Worklist) of + {empty, _WorkList} -> + ok; + {{value, App}, Worklist1} -> + case sets:is_element(App, Loaded) of + true -> load_applications(Worklist1, Loaded); + false -> case application:load(App) of + ok -> ok; + {error, {already_loaded, App}} -> ok; + Error -> throw(Error) + end, + load_applications( + queue:join(Worklist1, + queue:from_list(app_dependencies(App))), + sets:add_element(App, Loaded)) + end + end. + +app_dependencies(App) -> + case application:get_key(App, applications) of + undefined -> []; + {ok, Lst} -> Lst + end. + start_applications(Apps) -> manage_applications(fun lists:foldl/3, fun application:start/1, @@ -653,12 +683,6 @@ calculate_app_dependency_ordering(RootApps) -> true = digraph:delete(G) end. -app_dependencies(App) -> - case application:get_key(App, applications) of - undefined -> []; - {ok, Lst} -> Lst - end. - unfold(Fun, Init) -> unfold(Fun, [], Init). |
