diff options
| author | Matthew Sackman <matthew@rabbitmq.com> | 2011-06-28 15:32:31 +0100 |
|---|---|---|
| committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-06-28 15:32:31 +0100 |
| commit | 1e9d29e6cae34a6aa1e8e8fb023895d6912d5638 (patch) | |
| tree | eb1030e693a3a5a0103507f3a859219654f4d11b /src | |
| parent | 49caec2dcc9235696715bfd0d2a6a6c7b9961729 (diff) | |
| download | rabbitmq-server-git-1e9d29e6cae34a6aa1e8e8fb023895d6912d5638.tar.gz | |
Build graph; prune graph; traverse graph; obey graph.
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit.erl | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl index 5f727a823a..ce1205707c 100644 --- a/src/rabbit.erl +++ b/src/rabbit.erl @@ -201,14 +201,14 @@ prepare() -> start() -> try ok = prepare(), - ok = rabbit_misc:start_applications(?APPS) + ok = rabbit_misc:start_applications(application_load_order()) after %%give the error loggers some time to catch up timer:sleep(100) end. stop() -> - ok = rabbit_misc:stop_applications(?APPS). + ok = rabbit_misc:stop_applications(application_load_order()). stop_and_halt() -> init:stop(), @@ -386,6 +386,24 @@ config_files() -> %%--------------------------------------------------------------------------- +application_load_order() -> + {ok, G} = rabbit_misc:build_acyclic_graph( + fun application_graph_vertex/2, fun application_graph_edge/2, + [{App, Deps} || + {App, _Desc, _Vsn} <- application:loaded_applications(), + {ok, Deps} <- [application:get_key(App, applications)]]), + true = digraph:del_vertices( + G, digraph:vertices(G) -- digraph_utils:reachable(?APPS, G)), + digraph_utils:topsort(G). + +application_graph_vertex(App, _Deps) -> + [{App, App}]. + +application_graph_edge(App, Deps) -> + [{Dep, App} || Dep <- Deps]. + +%%--------------------------------------------------------------------------- + print_banner() -> {ok, Product} = application:get_key(id), {ok, Version} = application:get_key(vsn), |
