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 | 75a04e11e0749f8268ae9f66e7f8a09d2db7879b (patch) | |
tree | eb1030e693a3a5a0103507f3a859219654f4d11b | |
parent | a41f6d5d1f7426f6049be8eccc7d04e3e6a633d5 (diff) | |
download | rabbitmq-server-75a04e11e0749f8268ae9f66e7f8a09d2db7879b.tar.gz |
Build graph; prune graph; traverse graph; obey graph.
-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 5f727a82..ce120570 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), |