summaryrefslogtreecommitdiff
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
parent877bd6f917cf9958a3151c693d001173a200d077 (diff)
downloadrabbitmq-server-bug26378.tar.gz
Move actual supervisor definitions out to avoid conflicting behaviours in a module.bug26378
-rw-r--r--src/mirrored_supervisor.erl25
-rw-r--r--src/mirrored_supervisor_sups.erl43
2 files changed, 47 insertions, 21 deletions
diff --git a/src/mirrored_supervisor.erl b/src/mirrored_supervisor.erl
index 1ed6d710..289b9cc4 100644
--- a/src/mirrored_supervisor.erl
+++ b/src/mirrored_supervisor.erl
@@ -119,6 +119,7 @@
-define(SUPERVISOR, supervisor2).
-define(GEN_SERVER, gen_server2).
-define(PG2, pg2_fixed).
+-define(SUP_MODULE, mirrored_supervisor_sups).
-define(TABLE, mirrored_sup_childspec).
-define(TABLE_DEF,
@@ -134,7 +135,6 @@
which_children/1, count_children/1, check_childspecs/1]).
-behaviour(?GEN_SERVER).
--behaviour(?SUPERVISOR).
-export([init/1, handle_call/3, handle_info/2, terminate/2, code_change/3,
handle_cast/2]).
@@ -221,7 +221,7 @@ start_link({global, _SupName}, _Group, _TxFun, _Mod, _Args) ->
start_link0(Prefix, Group, TxFun, Init) ->
case apply(?SUPERVISOR, start_link,
- Prefix ++ [?MODULE, {overall, Group, TxFun, Init}]) of
+ Prefix ++ [?SUP_MODULE, {overall, Group, TxFun, Init}]) of
{ok, Pid} -> case catch call(Pid, {init, Pid}) of
ok -> {ok, Pid};
E -> E
@@ -280,29 +280,12 @@ mirroring(Sup) -> child(Sup, mirroring).
%%----------------------------------------------------------------------------
start_internal(Group, TxFun, ChildSpecs) ->
- ?GEN_SERVER:start_link(?MODULE, {mirroring, Group, TxFun, ChildSpecs},
+ ?GEN_SERVER:start_link(?MODULE, {Group, TxFun, ChildSpecs},
[{timeout, infinity}]).
%%----------------------------------------------------------------------------
-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', ...) below
- {ok, {{one_for_all, 0, 1},
- [{delegate, {?SUPERVISOR, start_link, [?MODULE, {delegate, Restart}]},
- temporary, 16#ffffffff, supervisor, [?SUPERVISOR]},
- {mirroring, {?MODULE, start_internal, [Group, TxFun, ChildSpecs]},
- permanent, 16#ffffffff, worker, [?MODULE]}]}};
-
-
-init({delegate, Restart}) ->
- {ok, {Restart, []}};
-
-init({mirroring, Group, TxFun, ChildSpecs}) ->
+init({Group, TxFun, ChildSpecs}) ->
{ok, #state{group = Group,
tx_fun = TxFun,
initial_childspecs = ChildSpecs}}.
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, []}}.