summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-11-30 12:38:47 +0100
committerJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2015-11-30 12:41:39 +0100
commit840e23d9eab4394938546cbdbbb9f28b9de1d009 (patch)
treed813c1794890352653d7418ac91984799cfa90d6
parent13f8c6f64c31e1f15c185dcb53fff200ccd4af18 (diff)
downloadrabbitmq-server-git-840e23d9eab4394938546cbdbbb9f28b9de1d009.tar.gz
HiPE: Compile modules when RabbitMQ is started on an existing node
Now, maybe_hipe_compile/0 is always called, no matter if RabbitMQ is started during node boot or on an already running node. To avoid compiling modules several times, we check if they are already natively compiled and skip those where it's true. Fixes #457.
-rw-r--r--src/rabbit.erl23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/rabbit.erl b/src/rabbit.erl
index 2f9b427c27..2b9237a15b 100644
--- a/src/rabbit.erl
+++ b/src/rabbit.erl
@@ -262,6 +262,9 @@ maybe_hipe_compile() ->
log_hipe_result({ok, disabled}) ->
ok;
+log_hipe_result({ok, already_compiled}) ->
+ rabbit_log:info(
+ "HiPE in use: modules already natively compiled.~n", []);
log_hipe_result({ok, Count, Duration}) ->
rabbit_log:info(
"HiPE in use: compiled ~B modules in ~Bs.~n", [Count, Duration]);
@@ -276,7 +279,19 @@ log_hipe_result(false) ->
%% progress via stdout.
hipe_compile() ->
{ok, HipeModulesAll} = application:get_env(rabbit, hipe_modules),
- HipeModules = [HM || HM <- HipeModulesAll, code:which(HM) =/= non_existing],
+ HipeModules = [HM || HM <- HipeModulesAll,
+ code:which(HM) =/= non_existing andalso
+ %% We skip modules already natively compiled. This
+ %% happens when RabbitMQ is stopped (just the
+ %% application, not the entire node) and started
+ %% again.
+ HM:module_info(native) =:= false],
+ case HipeModules of
+ [] -> {ok, already_compiled};
+ _ -> do_hipe_compile(HipeModules)
+ end.
+
+do_hipe_compile(HipeModules) ->
Count = length(HipeModules),
io:format("~nHiPE compiling: |~s|~n |",
[string:copies("-", Count)]),
@@ -325,10 +340,12 @@ ensure_application_loaded() ->
start() ->
start_it(fun() ->
- %% We do not want to HiPE compile or upgrade
- %% mnesia after just restarting the app
+ %% We do not want to upgrade mnesia after just
+ %% restarting the app.
ok = ensure_application_loaded(),
+ HipeResult = maybe_hipe_compile(),
ok = ensure_working_log_handlers(),
+ log_hipe_result(HipeResult),
rabbit_node_monitor:prepare_cluster_status_files(),
rabbit_mnesia:check_cluster_consistency(),
broker_start()