summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancesco Mazzoli <francesco@rabbitmq.com>2012-03-05 16:18:50 +0000
committerFrancesco Mazzoli <francesco@rabbitmq.com>2012-03-05 16:18:50 +0000
commitff6b42f4b42a2d66d7eccca6d880e28000bb673c (patch)
treeb85a971c19a3ea368a89b365aa76acd480b920d8
parentf51479e4876b29ecbcfb7d633afc9df215cb8b8b (diff)
downloadrabbitmq-server-ff6b42f4b42a2d66d7eccca6d880e28000bb673c.tar.gz
Added specs for gm callbacks.
-rw-r--r--src/gen_server2.erl2
-rw-r--r--src/gm.erl103
2 files changed, 57 insertions, 48 deletions
diff --git a/src/gen_server2.erl b/src/gen_server2.erl
index 765009ff..50476392 100644
--- a/src/gen_server2.erl
+++ b/src/gen_server2.erl
@@ -252,7 +252,7 @@
{stop, Reason :: term(), NewState :: term()}.
-callback terminate(Reason :: (normal | shutdown | {shutdown, term()} | term()),
State :: term()) ->
- (ok | term()).
+ ok | term().
-callback code_change(OldVsn :: (term() | {down, term()}), State :: term(),
Extra :: term()) ->
{ok, NewState :: term()} | {error, Reason :: term()}.
diff --git a/src/gm.erl b/src/gm.erl
index 6f9ff564..01300f18 100644
--- a/src/gm.erl
+++ b/src/gm.erl
@@ -57,8 +57,8 @@
%% you wish to be passed into the callback module's functions. The
%% joined/2 function will be called when we have joined the group,
%% with the arguments passed to start_link and a list of the current
-%% members of the group. See the comments in behaviour_info/1 below
-%% for further details of the callback functions.
+%% members of the group. See the callbacks specs and the comments
+%% below for further details of the callback functions.
%%
%% leave/1
%% Provide the Pid. Removes the Pid from the group. The callback
@@ -378,7 +378,9 @@
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
code_change/3, prioritise_info/2]).
+-ifndef(use_specs).
-export([behaviour_info/1]).
+-endif.
-export([table_definitions/0]).
@@ -431,56 +433,63 @@
-spec(confirmed_broadcast/2 :: (pid(), any()) -> 'ok').
-spec(group_members/1 :: (pid()) -> [pid()]).
--endif.
+%% The joined, members_changed and handle_msg callbacks can all
+%% return any of the following terms:
+%%
+%% 'ok' - the callback function returns normally
+%%
+%% {'stop', Reason} - the callback indicates the member should
+%% stop with reason Reason and should leave the group.
+%%
+%% {'become', Module, Args} - the callback indicates that the
+%% callback module should be changed to Module and that the
+%% callback functions should now be passed the arguments
+%% Args. This allows the callback module to be dynamically
+%% changed.
+
+%% Called when we've successfully joined the group. Supplied with
+%% Args provided in start_link, plus current group members.
+-callback joined(Args :: term(), Members :: [pid()]) ->
+ ok | {stop, Reason :: term()} | {become, Module :: atom(), Args :: any()}.
+
+%% Supplied with Args provided in start_link, the list of new
+%% members and the list of members previously known to us that
+%% have since died. Note that if a member joins and dies very
+%% quickly, it's possible that we will never see that member
+%% appear in either births or deaths. However we are guaranteed
+%% that (1) we will see a member joining either in the births
+%% here, or in the members passed to joined/2 before receiving
+%% any messages from it; and (2) we will not see members die that
+%% we have not seen born (or supplied in the members to
+%% joined/2).
+-callback members_changed(Args :: term(), Births :: [pid()],
+ Deaths :: [pid()]) ->
+ ok | {stop, Reason :: term()} | {become, Module :: atom(), Args :: any()}.
+
+%% Supplied with Args provided in start_link, the sender, and the
+%% message. This does get called for messages injected by this
+%% member, however, in such cases, there is no special
+%% significance of this invocation: it does not indicate that the
+%% message has made it to any other members, let alone all other
+%% members.
+-callback handle_msg(Args :: term(), From :: pid(), Message :: term()) ->
+ ok | {stop, Reason :: term()} | {become, Module :: atom(), Args :: any()}.
+
+%% 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()) ->
+ ok | term().
+
+-else.
behaviour_info(callbacks) ->
- [
- %% The joined, members_changed and handle_msg callbacks can all
- %% return any of the following terms:
- %%
- %% 'ok' - the callback function returns normally
- %%
- %% {'stop', Reason} - the callback indicates the member should
- %% stop with reason Reason and should leave the group.
- %%
- %% {'become', Module, Args} - the callback indicates that the
- %% callback module should be changed to Module and that the
- %% callback functions should now be passed the arguments
- %% Args. This allows the callback module to be dynamically
- %% changed.
-
- %% Called when we've successfully joined the group. Supplied with
- %% Args provided in start_link, plus current group members.
- {joined, 2},
-
- %% Supplied with Args provided in start_link, the list of new
- %% members and the list of members previously known to us that
- %% have since died. Note that if a member joins and dies very
- %% quickly, it's possible that we will never see that member
- %% appear in either births or deaths. However we are guaranteed
- %% that (1) we will see a member joining either in the births
- %% here, or in the members passed to joined/2 before receiving
- %% any messages from it; and (2) we will not see members die that
- %% we have not seen born (or supplied in the members to
- %% joined/2).
- {members_changed, 3},
-
- %% Supplied with Args provided in start_link, the sender, and the
- %% message. This does get called for messages injected by this
- %% member, however, in such cases, there is no special
- %% significance of this invocation: it does not indicate that the
- %% message has made it to any other members, let alone all other
- %% members.
- {handle_msg, 3},
-
- %% Called on gm member termination as per rules in gen_server,
- %% with the Args provided in start_link plus the termination
- %% Reason.
- {terminate, 2}
- ];
+ [{joined, 2}, {members_changed, 3}, {handle_msg, 3}, {terminate, 2}];
behaviour_info(_Other) ->
undefined.
+-endif.
+
create_tables() ->
create_tables([?TABLE]).