summaryrefslogtreecommitdiff
path: root/src/mirrored_supervisor_sups.erl
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-09-22 16:51:46 +0100
committerSimon MacMullen <simon@rabbitmq.com>2014-09-22 16:51:46 +0100
commit178af6f5d42519a6b8da99fafa22820b3752aebb (patch)
tree0a91cf5c3b4bb74642e9196544b04e8593b59792 /src/mirrored_supervisor_sups.erl
parent877bd6f917cf9958a3151c693d001173a200d077 (diff)
downloadrabbitmq-server-178af6f5d42519a6b8da99fafa22820b3752aebb.tar.gz
Move actual supervisor definitions out to avoid conflicting behaviours in a module.bug26378
Diffstat (limited to 'src/mirrored_supervisor_sups.erl')
-rw-r--r--src/mirrored_supervisor_sups.erl43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/mirrored_supervisor_sups.erl b/src/mirrored_supervisor_sups.erl
new file mode 100644
index 00000000..6ec08435
--- /dev/null
+++ b/src/mirrored_supervisor_sups.erl
@@ -0,0 +1,43 @@
+%% The contents of this file are subject to the Mozilla Public License
+%% Version 1.1 (the "License"); you may not use this file except in
+%% compliance with the License. You may obtain a copy of the License at
+%% http://www.mozilla.org/MPL/
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+%% License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% The Original Code is RabbitMQ.
+%%
+%% The Initial Developer of the Original Code is GoPivotal, Inc.
+%% Copyright (c) 2011-2014 GoPivotal, Inc. All rights reserved.
+%%
+
+-module(mirrored_supervisor_sups).
+
+-define(SUPERVISOR, supervisor2).
+-define(GS_MODULE, mirrored_supervisor).
+
+-behaviour(?SUPERVISOR).
+
+-export([init/1]).
+
+%%----------------------------------------------------------------------------
+
+init({overall, _Group, _TxFun, ignore}) -> ignore;
+init({overall, Group, TxFun, {ok, {Restart, ChildSpecs}}}) ->
+ %% Important: Delegate MUST start before Mirroring so that when we
+ %% shut down from above it shuts down last, so Mirroring does not
+ %% see it die.
+ %%
+ %% See comment in handle_info('DOWN', ...) in mirrored_supervisor
+ {ok, {{one_for_all, 0, 1},
+ [{delegate, {?SUPERVISOR, start_link, [?MODULE, {delegate, Restart}]},
+ temporary, 16#ffffffff, supervisor, [?SUPERVISOR]},
+ {mirroring, {?GS_MODULE, start_internal, [Group, TxFun, ChildSpecs]},
+ permanent, 16#ffffffff, worker, [?MODULE]}]}};
+
+
+init({delegate, Restart}) ->
+ {ok, {Restart, []}}.