Skip to content

Compile on OTP 19.0 #861

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 28, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -91,12 +91,6 @@ ifdef CREDIT_FLOW_TRACING
RMQ_ERLC_OPTS += -DCREDIT_FLOW_TRACING=true
endif

ERTS_VER := $(shell erl -version 2>&1 | sed -E 's/.* version //')
USE_SPECS_MIN_ERTS_VER = 5.11
ifeq ($(call compare_version,$(ERTS_VER),$(USE_SPECS_MIN_ERTS_VER),>=),true)
RMQ_ERLC_OPTS += -Duse_specs
endif

ifndef USE_PROPER_QC
# PropEr needs to be installed for property checking
# http://proper.softlab.ntua.gr/
Expand Down
18 changes: 7 additions & 11 deletions include/gm_specs.hrl
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,11 @@
%% Copyright (c) 2007-2015 Pivotal Software, Inc. All rights reserved.
%%

-ifdef(use_specs).
-type callback_result() :: 'ok' | {'stop', any()} | {'become', atom(), args()}.
-type args() :: any().
-type members() :: [pid()].

-type(callback_result() :: 'ok' | {'stop', any()} | {'become', atom(), args()}).
-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(handle_terminate/2 :: (args(), term()) -> any()).

-endif.
-spec joined(args(), members()) -> callback_result().
-spec members_changed(args(), members(),members()) -> callback_result().
-spec handle_msg(args(), pid(), any()) -> callback_result().
-spec handle_terminate(args(), term()) -> any().
2 changes: 1 addition & 1 deletion packaging/standalone/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ clean:
generate_release:
erlc \
-I $(TARGET_DIR)/include/ -o src -Wall \
-v +debug_info -Duse_specs -Duse_proper_qc \
-v +debug_info -Duse_proper_qc \
-pa $(TARGET_DIR)/ebin/ src/rabbit_release.erl
ERL_LIBS="$(TARGET_DIR)/plugins:$$ERL_LIBS" \
erl \
Expand Down
10 changes: 3 additions & 7 deletions src/background_gc.erl
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,9 @@

%%----------------------------------------------------------------------------

-ifdef(use_specs).

-spec(start_link/0 :: () -> {'ok', pid()} | {'error', any()}).
-spec(run/0 :: () -> 'ok').
-spec(gc/0 :: () -> 'ok').

-endif.
-spec start_link() -> {'ok', pid()} | {'error', any()}.
-spec run() -> 'ok'.
-spec gc() -> 'ok'.

%%----------------------------------------------------------------------------

Expand Down
30 changes: 13 additions & 17 deletions src/delegate.erl
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,24 @@

%%----------------------------------------------------------------------------

-ifdef(use_specs).

-export_type([monitor_ref/0]).

-type(monitor_ref() :: reference() | {atom(), pid()}).
-type(fun_or_mfa(A) :: fun ((pid()) -> A) | {atom(), atom(), [any()]}).
-type monitor_ref() :: reference() | {atom(), pid()}.
-type fun_or_mfa(A) :: fun ((pid()) -> A) | {atom(), atom(), [any()]}.

-spec(start_link/1 ::
(non_neg_integer()) -> {'ok', pid()} | ignore | {'error', any()}).
-spec(invoke/2 :: ( pid(), fun_or_mfa(A)) -> A;
([pid()], fun_or_mfa(A)) -> {[{pid(), A}],
[{pid(), term()}]}).
-spec(invoke_no_result/2 :: (pid() | [pid()], fun_or_mfa(any())) -> 'ok').
-spec(monitor/2 :: ('process', pid()) -> monitor_ref()).
-spec(demonitor/1 :: (monitor_ref()) -> 'true').
-spec start_link
(non_neg_integer()) -> {'ok', pid()} | ignore | {'error', any()}.
-spec invoke
( pid(), fun_or_mfa(A)) -> A;
([pid()], fun_or_mfa(A)) -> {[{pid(), A}], [{pid(), term()}]}.
-spec invoke_no_result(pid() | [pid()], fun_or_mfa(any())) -> 'ok'.
-spec monitor('process', pid()) -> monitor_ref().
-spec demonitor(monitor_ref()) -> 'true'.

-spec(call/2 ::
-spec call
( pid(), any()) -> any();
([pid()], any()) -> {[{pid(), any()}], [{pid(), term()}]}).
-spec(cast/2 :: (pid() | [pid()], any()) -> 'ok').

-endif.
([pid()], any()) -> {[{pid(), any()}], [{pid(), term()}]}.
-spec cast(pid() | [pid()], any()) -> 'ok'.

%%----------------------------------------------------------------------------

Expand Down
8 changes: 2 additions & 6 deletions src/delegate_sup.erl
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,8 @@

%%----------------------------------------------------------------------------

-ifdef(use_specs).

-spec(start_link/1 :: (integer()) -> rabbit_types:ok_pid_or_error()).
-spec(count/1 :: ([node()]) -> integer()).

-endif.
-spec start_link(integer()) -> rabbit_types:ok_pid_or_error().
-spec count([node()]) -> integer().

%%----------------------------------------------------------------------------

Expand Down
38 changes: 17 additions & 21 deletions src/dtree.erl
Original file line number Diff line number Diff line change
Expand Up @@ -37,29 +37,25 @@

%%----------------------------------------------------------------------------

-ifdef(use_specs).

-export_type([?MODULE/0]).

-opaque(?MODULE() :: {gb_trees:tree(), gb_trees:tree()}).

-type(pk() :: any()).
-type(sk() :: any()).
-type(val() :: any()).
-type(kv() :: {pk(), val()}).

-spec(empty/0 :: () -> ?MODULE()).
-spec(insert/4 :: (pk(), [sk()], val(), ?MODULE()) -> ?MODULE()).
-spec(take/3 :: ([pk()], sk(), ?MODULE()) -> {[kv()], ?MODULE()}).
-spec(take/2 :: (sk(), ?MODULE()) -> {[kv()], ?MODULE()}).
-spec(take_all/2 :: (sk(), ?MODULE()) -> {[kv()], ?MODULE()}).
-spec(drop/2 :: (pk(), ?MODULE()) -> ?MODULE()).
-spec(is_defined/2 :: (sk(), ?MODULE()) -> boolean()).
-spec(is_empty/1 :: (?MODULE()) -> boolean()).
-spec(smallest/1 :: (?MODULE()) -> kv()).
-spec(size/1 :: (?MODULE()) -> non_neg_integer()).

-endif.
-opaque ?MODULE() :: {gb_trees:tree(), gb_trees:tree()}.

-type pk() :: any().
-type sk() :: any().
-type val() :: any().
-type kv() :: {pk(), val()}.

-spec empty() -> ?MODULE().
-spec insert(pk(), [sk()], val(), ?MODULE()) -> ?MODULE().
-spec take([pk()], sk(), ?MODULE()) -> {[kv()], ?MODULE()}.
-spec take(sk(), ?MODULE()) -> {[kv()], ?MODULE()}.
-spec take_all(sk(), ?MODULE()) -> {[kv()], ?MODULE()}.
-spec drop(pk(), ?MODULE()) -> ?MODULE().
-spec is_defined(sk(), ?MODULE()) -> boolean().
-spec is_empty(?MODULE()) -> boolean().
-spec smallest(?MODULE()) -> kv().
-spec size(?MODULE()) -> non_neg_integer().

%%----------------------------------------------------------------------------

Expand Down
89 changes: 42 additions & 47 deletions src/file_handle_cache.erl
Original file line number Diff line number Diff line change
Expand Up @@ -234,58 +234,53 @@
%% Specs
%%----------------------------------------------------------------------------

-ifdef(use_specs).

-type(ref() :: any()).
-type(ok_or_error() :: 'ok' | {'error', any()}).
-type(val_or_error(T) :: {'ok', T} | {'error', any()}).
-type(position() :: ('bof' | 'eof' | non_neg_integer() |
-type ref() :: any().
-type ok_or_error() :: 'ok' | {'error', any()}.
-type val_or_error(T) :: {'ok', T} | {'error', any()}.
-type position() :: ('bof' | 'eof' | non_neg_integer() |
{('bof' |'eof'), non_neg_integer()} |
{'cur', integer()})).
-type(offset() :: non_neg_integer()).
{'cur', integer()}).
-type offset() :: non_neg_integer().

-spec(register_callback/3 :: (atom(), atom(), [any()]) -> 'ok').
-spec(open/3 ::
-spec register_callback(atom(), atom(), [any()]) -> 'ok'.
-spec open
(file:filename(), [any()],
[{'write_buffer', (non_neg_integer() | 'infinity' | 'unbuffered')} |
{'read_buffer', (non_neg_integer() | 'unbuffered')}])
-> val_or_error(ref())).
-spec(open_with_absolute_path/3 ::
{'read_buffer', (non_neg_integer() | 'unbuffered')}]) ->
val_or_error(ref()).
-spec open_with_absolute_path
(file:filename(), [any()],
[{'write_buffer', (non_neg_integer() | 'infinity' | 'unbuffered')} |
{'read_buffer', (non_neg_integer() | 'unbuffered')}])
-> val_or_error(ref())).
-spec(close/1 :: (ref()) -> ok_or_error()).
-spec(read/2 :: (ref(), non_neg_integer()) ->
val_or_error([char()] | binary()) | 'eof').
-spec(append/2 :: (ref(), iodata()) -> ok_or_error()).
-spec(sync/1 :: (ref()) -> ok_or_error()).
-spec(position/2 :: (ref(), position()) -> val_or_error(offset())).
-spec(truncate/1 :: (ref()) -> ok_or_error()).
-spec(current_virtual_offset/1 :: (ref()) -> val_or_error(offset())).
-spec(current_raw_offset/1 :: (ref()) -> val_or_error(offset())).
-spec(flush/1 :: (ref()) -> ok_or_error()).
-spec(copy/3 :: (ref(), ref(), non_neg_integer()) ->
val_or_error(non_neg_integer())).
-spec(delete/1 :: (ref()) -> ok_or_error()).
-spec(clear/1 :: (ref()) -> ok_or_error()).
-spec(set_maximum_since_use/1 :: (non_neg_integer()) -> 'ok').
-spec(obtain/0 :: () -> 'ok').
-spec(obtain/1 :: (non_neg_integer()) -> 'ok').
-spec(release/0 :: () -> 'ok').
-spec(release/1 :: (non_neg_integer()) -> 'ok').
-spec(transfer/1 :: (pid()) -> 'ok').
-spec(transfer/2 :: (pid(), non_neg_integer()) -> 'ok').
-spec(with_handle/1 :: (fun(() -> A)) -> A).
-spec(with_handle/2 :: (non_neg_integer(), fun(() -> A)) -> A).
-spec(set_limit/1 :: (non_neg_integer()) -> 'ok').
-spec(get_limit/0 :: () -> non_neg_integer()).
-spec(info_keys/0 :: () -> rabbit_types:info_keys()).
-spec(info/0 :: () -> rabbit_types:infos()).
-spec(info/1 :: ([atom()]) -> rabbit_types:infos()).
-spec(ulimit/0 :: () -> 'unknown' | non_neg_integer()).

-endif.
{'read_buffer', (non_neg_integer() | 'unbuffered')}]) ->
val_or_error(ref()).
-spec close(ref()) -> ok_or_error().
-spec read
(ref(), non_neg_integer()) -> val_or_error([char()] | binary()) | 'eof'.
-spec append(ref(), iodata()) -> ok_or_error().
-spec sync(ref()) -> ok_or_error().
-spec position(ref(), position()) -> val_or_error(offset()).
-spec truncate(ref()) -> ok_or_error().
-spec current_virtual_offset(ref()) -> val_or_error(offset()).
-spec current_raw_offset(ref()) -> val_or_error(offset()).
-spec flush(ref()) -> ok_or_error().
-spec copy(ref(), ref(), non_neg_integer()) -> val_or_error(non_neg_integer()).
-spec delete(ref()) -> ok_or_error().
-spec clear(ref()) -> ok_or_error().
-spec set_maximum_since_use(non_neg_integer()) -> 'ok'.
-spec obtain() -> 'ok'.
-spec obtain(non_neg_integer()) -> 'ok'.
-spec release() -> 'ok'.
-spec release(non_neg_integer()) -> 'ok'.
-spec transfer(pid()) -> 'ok'.
-spec transfer(pid(), non_neg_integer()) -> 'ok'.
-spec with_handle(fun(() -> A)) -> A.
-spec with_handle(non_neg_integer(), fun(() -> A)) -> A.
-spec set_limit(non_neg_integer()) -> 'ok'.
-spec get_limit() -> non_neg_integer().
-spec info_keys() -> rabbit_types:info_keys().
-spec info() -> rabbit_types:infos().
-spec info([atom()]) -> rabbit_types:infos().
-spec ulimit() -> 'unknown' | non_neg_integer().

%%----------------------------------------------------------------------------
-define(INFO_KEYS, [total_limit, total_used, sockets_limit, sockets_used]).
Expand Down Expand Up @@ -1482,7 +1477,7 @@ notify_age(CStates, AverageAge) ->
notify_age0(Clients, CStates, Required) ->
case [CState || CState <- CStates, CState#cstate.callback =/= undefined] of
[] -> ok;
Notifications -> S = random:uniform(length(Notifications)),
Notifications -> S = rand_compat:uniform(length(Notifications)),
{L1, L2} = lists:split(S, Notifications),
notify(Clients, Required, L2 ++ L1)
end.
Expand Down
18 changes: 7 additions & 11 deletions src/gatherer.erl
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,13 @@

%%----------------------------------------------------------------------------

-ifdef(use_specs).

-spec(start_link/0 :: () -> rabbit_types:ok_pid_or_error()).
-spec(stop/1 :: (pid()) -> 'ok').
-spec(fork/1 :: (pid()) -> 'ok').
-spec(finish/1 :: (pid()) -> 'ok').
-spec(in/2 :: (pid(), any()) -> 'ok').
-spec(sync_in/2 :: (pid(), any()) -> 'ok').
-spec(out/1 :: (pid()) -> {'value', any()} | 'empty').

-endif.
-spec start_link() -> rabbit_types:ok_pid_or_error().
-spec stop(pid()) -> 'ok'.
-spec fork(pid()) -> 'ok'.
-spec finish(pid()) -> 'ok'.
-spec in(pid(), any()) -> 'ok'.
-spec sync_in(pid(), any()) -> 'ok'.
-spec out(pid()) -> {'value', any()} | 'empty'.

%%----------------------------------------------------------------------------

Expand Down
42 changes: 12 additions & 30 deletions src/gm.erl
Original file line number Diff line number Diff line change
Expand Up @@ -391,10 +391,6 @@
%% For INSTR_MOD callbacks
-export([call/3, cast/2, monitor/1, demonitor/1]).

-ifndef(use_specs).
-export([behaviour_info/1]).
-endif.

-export([table_definitions/0]).

-define(GROUP_TABLE, gm_group).
Expand Down Expand Up @@ -436,22 +432,20 @@

-define(TAG, '$gm').

-ifdef(use_specs).

-export_type([group_name/0]).

-type(group_name() :: any()).
-type(txn_fun() :: fun((fun(() -> any())) -> any())).
-type group_name() :: any().
-type txn_fun() :: fun((fun(() -> any())) -> any()).

-spec(create_tables/0 :: () -> 'ok' | {'aborted', any()}).
-spec(start_link/4 :: (group_name(), atom(), any(), txn_fun()) ->
rabbit_types:ok_pid_or_error()).
-spec(leave/1 :: (pid()) -> 'ok').
-spec(broadcast/2 :: (pid(), any()) -> 'ok').
-spec(confirmed_broadcast/2 :: (pid(), any()) -> 'ok').
-spec(info/1 :: (pid()) -> rabbit_types:infos()).
-spec(validate_members/2 :: (pid(), [pid()]) -> 'ok').
-spec(forget_group/1 :: (group_name()) -> 'ok').
-spec create_tables() -> 'ok' | {'aborted', any()}.
-spec start_link(group_name(), atom(), any(), txn_fun()) ->
rabbit_types:ok_pid_or_error().
-spec leave(pid()) -> 'ok'.
-spec broadcast(pid(), any()) -> 'ok'.
-spec confirmed_broadcast(pid(), any()) -> 'ok'.
-spec info(pid()) -> rabbit_types:infos().
-spec validate_members(pid(), [pid()]) -> 'ok'.
-spec forget_group(group_name()) -> 'ok'.

%% The joined, members_changed and handle_msg callbacks can all return
%% any of the following terms:
Expand Down Expand Up @@ -497,15 +491,6 @@
-callback handle_terminate(Args :: term(), Reason :: term()) ->
ok | term().

-else.

behaviour_info(callbacks) ->
[{joined, 2}, {members_changed, 3}, {handle_msg, 3}, {handle_terminate, 2}];
behaviour_info(_Other) ->
undefined.

-endif.

create_tables() ->
create_tables([?TABLE]).

Expand Down Expand Up @@ -551,9 +536,6 @@ forget_group(GroupName) ->

init([GroupName, Module, Args, TxnFun]) ->
put(process_name, {?MODULE, GroupName}),
_ = random:seed(erlang:phash2([node()]),
time_compat:monotonic_time(),
time_compat:unique_integer()),
Self = make_member(GroupName),
gen_server2:cast(self(), join),
{ok, #state { self = Self,
Expand Down Expand Up @@ -1084,7 +1066,7 @@ join_group(Self, GroupName, #gm_group { members = Members } = Group, TxnFun) ->
prune_or_create_group(Self, GroupName, TxnFun),
TxnFun);
Alive ->
Left = lists:nth(random:uniform(length(Alive)), Alive),
Left = lists:nth(rand_compat:uniform(length(Alive)), Alive),
Handler =
fun () ->
join_group(
Expand Down
Loading