diff options
author | Simon MacMullen <simon@rabbitmq.com> | 2014-09-18 14:24:10 +0100 |
---|---|---|
committer | Simon MacMullen <simon@rabbitmq.com> | 2014-09-18 14:24:10 +0100 |
commit | 877bd6f917cf9958a3151c693d001173a200d077 (patch) | |
tree | f1dee43166431a0ec11a2bfc30658d10f10e6905 | |
parent | 32ec2e6d1ca4880ea97318b00c62ee6eba574439 (diff) | |
parent | bff67bd67dd96a63715c645ab4fad9c2467a292c (diff) | |
download | rabbitmq-server-877bd6f917cf9958a3151c693d001173a200d077.tar.gz |
Merge in default
-rw-r--r-- | include/gm_specs.hrl | 8 | ||||
-rw-r--r-- | src/gm.erl | 8 | ||||
-rw-r--r-- | src/rabbit_mirror_queue_coordinator.erl | 9 | ||||
-rw-r--r-- | src/rabbit_mirror_queue_slave.erl | 10 | ||||
-rw-r--r-- | test/src/gm_soak_test.erl | 4 | ||||
-rw-r--r-- | test/src/gm_speed_test.erl | 4 | ||||
-rw-r--r-- | test/src/gm_tests.erl | 4 | ||||
-rw-r--r-- | test/src/mirrored_supervisor_tests.erl | 67 | ||||
-rw-r--r-- | test/src/mirrored_supervisor_tests_gs.erl | 66 |
9 files changed, 103 insertions, 77 deletions
diff --git a/include/gm_specs.hrl b/include/gm_specs.hrl index 245c23bc..d8686cd1 100644 --- a/include/gm_specs.hrl +++ b/include/gm_specs.hrl @@ -20,9 +20,9 @@ -type(args() :: any()). -type(members() :: [pid()]). --spec(joined/2 :: (args(), members()) -> callback_result()). --spec(members_changed/3 :: (args(), members(), members()) -> callback_result()). --spec(handle_msg/3 :: (args(), pid(), any()) -> callback_result()). --spec(terminate/2 :: (args(), term()) -> any()). +-spec(joined/2 :: (args(), members()) -> callback_result()). +-spec(members_changed/3 :: (args(), members(),members()) -> callback_result()). +-spec(handle_msg/3 :: (args(), pid(), any()) -> callback_result()). +-spec(handle_terminate/2 :: (args(), term()) -> any()). -endif. @@ -62,7 +62,7 @@ %% %% leave/1 %% Provide the Pid. Removes the Pid from the group. The callback -%% terminate/2 function will be called. +%% handle_terminate/2 function will be called. %% %% broadcast/2 %% Provide the Pid and a Message. The message will be sent to all @@ -493,13 +493,13 @@ %% Called on gm member termination as per rules in gen_server, with %% the Args provided in start_link plus the termination Reason. --callback terminate(Args :: term(), Reason :: term()) -> +-callback handle_terminate(Args :: term(), Reason :: term()) -> ok | term(). -else. behaviour_info(callbacks) -> - [{joined, 2}, {members_changed, 3}, {handle_msg, 3}, {terminate, 2}]; + [{joined, 2}, {members_changed, 3}, {handle_msg, 3}, {handle_terminate, 2}]; behaviour_info(_Other) -> undefined. @@ -737,7 +737,7 @@ handle_info({'DOWN', MRef, process, _Pid, Reason}, terminate(Reason, State = #state { module = Module, callback_args = Args }) -> flush_broadcast_buffer(State), - Module:terminate(Args, Reason). + Module:handle_terminate(Args, Reason). code_change(_OldVsn, State, _Extra) -> diff --git a/src/rabbit_mirror_queue_coordinator.erl b/src/rabbit_mirror_queue_coordinator.erl index 23718da1..3d460528 100644 --- a/src/rabbit_mirror_queue_coordinator.erl +++ b/src/rabbit_mirror_queue_coordinator.erl @@ -21,7 +21,7 @@ -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). --export([joined/2, members_changed/3, handle_msg/3]). +-export([joined/2, members_changed/3, handle_msg/3, handle_terminate/2]). -behaviour(gen_server2). -behaviour(gm). @@ -384,10 +384,6 @@ handle_info(Msg, State) -> {stop, {unexpected_info, Msg}, State}. terminate(_Reason, #state{}) -> - %% gen_server case - ok; -terminate([_CPid], _Reason) -> - %% gm case ok. code_change(_OldVsn, State, _Extra) -> @@ -416,6 +412,9 @@ handle_msg([CPid], _From, {delete_and_terminate, _Reason} = Msg) -> handle_msg([_CPid], _From, _Msg) -> ok. +handle_terminate([_CPid], _Reason) -> + ok. + %% --------------------------------------------------------------------------- %% Others %% --------------------------------------------------------------------------- diff --git a/src/rabbit_mirror_queue_slave.erl b/src/rabbit_mirror_queue_slave.erl index 2da2e7a5..af1e2141 100644 --- a/src/rabbit_mirror_queue_slave.erl +++ b/src/rabbit_mirror_queue_slave.erl @@ -30,7 +30,7 @@ code_change/3, handle_pre_hibernate/1, prioritise_call/4, prioritise_cast/3, prioritise_info/3, format_message_queue/2]). --export([joined/2, members_changed/3, handle_msg/3]). +-export([joined/2, members_changed/3, handle_msg/3, handle_terminate/2]). -behaviour(gen_server2). -behaviour(gm). @@ -338,10 +338,7 @@ terminate({shutdown, _} = R, State) -> terminate(Reason, State = #state{backing_queue = BQ, backing_queue_state = BQS}) -> terminate_common(State), - BQ:delete_and_terminate(Reason, BQS); -terminate([_SPid], _Reason) -> - %% gm case - ok. + BQ:delete_and_terminate(Reason, BQS). %% If the Reason is shutdown, or {shutdown, _}, it is not the queue %% being deleted: it's just the node going down. Even though we're a @@ -438,6 +435,9 @@ handle_msg([SPid], _From, {sync_start, Ref, Syncer, SPids}) -> handle_msg([SPid], _From, Msg) -> ok = gen_server2:cast(SPid, {gm, Msg}). +handle_terminate([_SPid], _Reason) -> + ok. + %% --------------------------------------------------------------------------- %% Others %% --------------------------------------------------------------------------- diff --git a/test/src/gm_soak_test.erl b/test/src/gm_soak_test.erl index c9a25522..90b94e42 100644 --- a/test/src/gm_soak_test.erl +++ b/test/src/gm_soak_test.erl @@ -17,7 +17,7 @@ -module(gm_soak_test). -export([test/0]). --export([joined/2, members_changed/3, handle_msg/3, terminate/2]). +-export([joined/2, members_changed/3, handle_msg/3, handle_terminate/2]). -behaviour(gm). @@ -94,7 +94,7 @@ handle_msg([], From, {test_msg, Num}) -> end), ok. -terminate([], Reason) -> +handle_terminate([], Reason) -> io:format("Left ~p (~p)~n", [self(), Reason]), ok. diff --git a/test/src/gm_speed_test.erl b/test/src/gm_speed_test.erl index 41be6dd8..f2aedff6 100644 --- a/test/src/gm_speed_test.erl +++ b/test/src/gm_speed_test.erl @@ -17,7 +17,7 @@ -module(gm_speed_test). -export([test/3]). --export([joined/2, members_changed/3, handle_msg/3, terminate/2]). +-export([joined/2, members_changed/3, handle_msg/3, handle_terminate/2]). -export([wile_e_coyote/2]). -behaviour(gm). @@ -37,7 +37,7 @@ handle_msg(Owner, _From, ping) -> Owner ! ping, ok. -terminate(Owner, _Reason) -> +handle_terminate(Owner, _Reason) -> Owner ! terminated, ok. diff --git a/test/src/gm_tests.erl b/test/src/gm_tests.erl index cae2164b..db552ce7 100644 --- a/test/src/gm_tests.erl +++ b/test/src/gm_tests.erl @@ -22,7 +22,7 @@ test_member_death/0, test_receive_in_order/0, all_tests/0]). --export([joined/2, members_changed/3, handle_msg/3, terminate/2]). +-export([joined/2, members_changed/3, handle_msg/3, handle_terminate/2]). -behaviour(gm). @@ -48,7 +48,7 @@ handle_msg(Pid, From, Msg) -> Pid ! {msg, self(), From, Msg}, ok. -terminate(Pid, Reason) -> +handle_terminate(Pid, Reason) -> Pid ! {termination, self(), Reason}, ok. diff --git a/test/src/mirrored_supervisor_tests.erl b/test/src/mirrored_supervisor_tests.erl index 26f59e01..bf7d2e55 100644 --- a/test/src/mirrored_supervisor_tests.erl +++ b/test/src/mirrored_supervisor_tests.erl @@ -16,15 +16,14 @@ -module(mirrored_supervisor_tests). --compile([export_all]). +-export([all_tests/0]). --export([init/1, handle_call/3, handle_info/2, terminate/2, code_change/3, - handle_cast/2]). +-export([init/1]). --behaviour(gen_server). -behaviour(mirrored_supervisor). --define(MS, mirrored_supervisor). +-define(MS, mirrored_supervisor). +-define(SERVER, mirrored_supervisor_tests_gs). %% --------------------------------------------------------------------------- %% Functional tests @@ -176,14 +175,14 @@ test_start_idempotence() -> test_unsupported() -> try ?MS:start_link({global, foo}, get_group(group), fun tx_fun/1, ?MODULE, - {sup, one_for_one, []}), + {one_for_one, []}), exit(no_global) catch error:badarg -> ok end, try ?MS:start_link({local, foo}, get_group(group), fun tx_fun/1, ?MODULE, - {sup, simple_one_for_one, []}), + {simple_one_for_one, []}), exit(no_sofo) catch error:badarg -> ok @@ -193,7 +192,7 @@ test_unsupported() -> %% Just test we don't blow up test_ignore() -> ?MS:start_link({local, foo}, get_group(group), fun tx_fun/1, ?MODULE, - {sup, fake_strategy_for_ignore, []}), + {fake_strategy_for_ignore, []}), passed. test_startup_failure() -> @@ -203,7 +202,7 @@ test_startup_failure() -> test_startup_failure(Fail) -> process_flag(trap_exit, true), ?MS:start_link(get_group(group), fun tx_fun/1, ?MODULE, - {sup, one_for_one, [childspec(Fail)]}), + {one_for_one, [childspec(Fail)]}), receive {'EXIT', _, shutdown} -> ok @@ -237,23 +236,14 @@ start_sup(Name, Group) -> start_sup0(anon, Group, ChildSpecs) -> ?MS:start_link(Group, fun tx_fun/1, ?MODULE, - {sup, one_for_one, ChildSpecs}); + {one_for_one, ChildSpecs}); start_sup0(Name, Group, ChildSpecs) -> ?MS:start_link({local, Name}, Group, fun tx_fun/1, ?MODULE, - {sup, one_for_one, ChildSpecs}). + {one_for_one, ChildSpecs}). childspec(Id) -> - {Id, {?MODULE, start_gs, [Id]}, transient, 16#ffffffff, worker, [?MODULE]}. - -start_gs(want_error) -> - {error, foo}; - -start_gs(want_exit) -> - exit(foo); - -start_gs(Id) -> - gen_server:start_link({local, Id}, ?MODULE, server, []). + {Id,{?SERVER, start_link, [Id]}, transient, 16#ffffffff, worker, [?MODULE]}. pid_of(Id) -> {received, Pid, ping} = call(Id, ping), @@ -309,38 +299,9 @@ kill_wait(Pid) -> end. %% --------------------------------------------------------------------------- -%% Dumb gen_server we can supervise -%% --------------------------------------------------------------------------- -init({sup, fake_strategy_for_ignore, _ChildSpecs}) -> +init({fake_strategy_for_ignore, _ChildSpecs}) -> ignore; -init({sup, Strategy, ChildSpecs}) -> - {ok, {{Strategy, 0, 1}, ChildSpecs}}; - -init(server) -> - {ok, state}. - -handle_call(Msg, _From, State) -> - die_if_my_supervisor_is_evil(), - {reply, {received, self(), Msg}, State}. - -handle_cast(_Msg, State) -> - {noreply, State}. - -handle_info(_Info, State) -> - {noreply, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. - -die_if_my_supervisor_is_evil() -> - try lists:keysearch(self(), 2, ?MS:which_children(evil)) of - false -> ok; - _ -> exit(doooom) - catch - exit:{noproc, _} -> ok - end. +init({Strategy, ChildSpecs}) -> + {ok, {{Strategy, 0, 1}, ChildSpecs}}. diff --git a/test/src/mirrored_supervisor_tests_gs.erl b/test/src/mirrored_supervisor_tests_gs.erl new file mode 100644 index 00000000..12ed0d6f --- /dev/null +++ b/test/src/mirrored_supervisor_tests_gs.erl @@ -0,0 +1,66 @@ +%% 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_tests_gs). + +%% Dumb gen_server we can supervise + +-export([start_link/1]). + +-export([init/1, handle_call/3, handle_info/2, terminate/2, code_change/3, + handle_cast/2]). + +-behaviour(gen_server). + +-define(MS, mirrored_supervisor). + +start_link(want_error) -> + {error, foo}; + +start_link(want_exit) -> + exit(foo); + +start_link(Id) -> + gen_server:start_link({local, Id}, ?MODULE, [], []). + +%% --------------------------------------------------------------------------- + +init([]) -> + {ok, state}. + +handle_call(Msg, _From, State) -> + die_if_my_supervisor_is_evil(), + {reply, {received, self(), Msg}, State}. + +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +die_if_my_supervisor_is_evil() -> + try lists:keysearch(self(), 2, ?MS:which_children(evil)) of + false -> ok; + _ -> exit(doooom) + catch + exit:{noproc, _} -> ok + end. |