Skip to content

Commit f74d166

Browse files
committed
fix dialyzer errors
1 parent 61b68cc commit f74d166

12 files changed

+55
-57
lines changed

Makefile

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
.PHONY: test
1+
.PHONY: test deps
22

33
rafter:
44
./rebar compile
5+
deps:
6+
./rebar get-deps
57
test:
68
./rebar eunit skip_deps=true
79

include/rafter_consensus_fsm.hrl

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@
1313
term = 0 :: non_neg_integer(),
1414
voted_for :: term(),
1515
commit_index = 0 :: non_neg_integer(),
16-
init_config :: undefined | list() | complete,
16+
init_config :: undefined | list() | complete | no_client,
1717

1818
%% Used for Election and Heartbeat timeouts
19-
timer :: timer:tref(),
19+
timer :: reference(),
2020

2121
%% leader state: contains nextIndex for each peer
2222
followers = dict:new() :: dict(),

rebar.config

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,6 @@
44

55
{erl_opts, [debug_info, warnings_as_errors, {parse_transform, lager_transform}]}.
66

7-
{deps, [{lager, ".*", {git, "git://github.com/basho/lager", {tag, "2.0.0rc2"}}},
7+
{deps, [{lager, ".*", {git, "git://github.com/basho/lager", {tag, "2.0.1"}}},
88
{druuid, ".*", {git, "git://github.com/kellymclaughlin/druuid.git", {tag, "0.2"}}}
99
]}.

src/rafter.erl

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
%% API
88
-export([start_node/2, stop_node/1, op/2, read_op/2, set_config/2,
9-
get_state/1, get_leader/1, get_entry/2, get_last_entry/1]).
9+
get_leader/1, get_entry/2, get_last_entry/1]).
1010

1111
%% Test API
1212
-export([start_cluster/0, start_test_node/1]).
@@ -33,7 +33,7 @@ set_config(Peer, NewServers) ->
3333

3434
-spec get_leader(peer()) -> peer() | undefined.
3535
get_leader(Peer) ->
36-
rafter_consensus_fsm:leader(Peer).
36+
rafter_consensus_fsm:get_leader(Peer).
3737

3838
-spec get_entry(peer(), non_neg_integer()) -> term().
3939
get_entry(Peer, Index) ->
@@ -48,15 +48,15 @@ get_last_entry(Peer) ->
4848
%% =============================================
4949

5050
start_cluster() ->
51-
application:start(lager),
52-
application:start(rafter),
51+
ok = application:start(lager),
52+
ok = application:start(rafter),
5353
Opts = #rafter_opts{state_machine=rafter_backend_echo, logdir="./log"},
5454
Peers = [peer1, peer2, peer3, peer4, peer5],
5555
[rafter_sup:start_peer(Me, Opts) || Me <- Peers].
5656

5757
start_test_node(Name) ->
58-
application:start(lager),
59-
application:start(rafter),
58+
ok = application:start(lager),
59+
ok = application:start(rafter),
6060
Me = {Name, node()},
6161
Opts = #rafter_opts{state_machine=rafter_backend_ets, logdir="./data"},
6262
start_node(Me, Opts).

src/rafter_backend.erl

+5-7
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
-module(rafter_backend).
22

3-
-export([behaviour_info/1]).
4-
5-
behaviour_info(callbacks) ->
6-
[{init, 1}, {read, 2}, {write, 2}];
7-
behaviour_info(_) ->
8-
undefined.
9-
3+
-callback init(Args :: term()) -> State :: term().
4+
-callback read(Operation :: term(), State :: term()) ->
5+
{Value :: term(), State :: term()}.
6+
-callback write(Operation :: term(), State :: term()) ->
7+
{Value :: term(), State :: term()}.

src/rafter_backend_ets.erl

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
init(Peer) ->
1111
State = #state{peer=Peer},
1212
NewState = stop(State),
13-
ets:new(rafter_backend_ets, [set, named_table, public]),
14-
ets:new(rafter_backend_ets_tables, [set, named_table, public]),
13+
_Tid = ets:new(rafter_backend_ets, [set, named_table, public]),
14+
_Tid = ets:new(rafter_backend_ets_tables, [set, named_table, public]),
1515
NewState.
1616

1717
stop(State) ->
@@ -46,7 +46,7 @@ read({list_keys, Table}, State) ->
4646

4747
write({new, Name}, State) ->
4848
Val = try
49-
ets:new((Name), [ordered_set, named_table, public]),
49+
_Tid = ets:new((Name), [ordered_set, named_table, public]),
5050
ets:insert(rafter_backend_ets_tables, {Name}),
5151
{ok, Name}
5252
catch _:E ->

src/rafter_config.erl

+9-9
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,15 @@
1010
%% API
1111
%%====================================================================
1212

13-
-spec quorum_min(term(), #config{}, dict()) -> non_neg_integer().
13+
-spec quorum_min(term(), #config{} | [], dict()) -> non_neg_integer().
1414
quorum_min(_Me, #config{state=blank}, _) ->
1515
0;
1616
quorum_min(Me, #config{state=stable, oldservers=OldServers}, Responses) ->
1717
quorum_min(Me, OldServers, Responses);
1818
quorum_min(Me, #config{state=staging, oldservers=OldServers}, Responses) ->
1919
quorum_min(Me, OldServers, Responses);
20-
quorum_min(Me, #config{state=transitional,
21-
oldservers=Old,
20+
quorum_min(Me, #config{state=transitional,
21+
oldservers=Old,
2222
newservers=New}, Responses) ->
2323
min(quorum_min(Me, Old, Responses), quorum_min(Me, New, Responses));
2424

@@ -51,13 +51,13 @@ quorum(Me, #config{state=transitional, oldservers=Old, newservers=New}, Response
5151
%% this case.
5252
quorum(Me, Servers, Responses) ->
5353
TrueResponses = [R || {Peer, R} <- dict:to_list(Responses), R =:= true,
54-
lists:member(Peer, Servers)],
54+
lists:member(Peer, Servers)],
5555
case lists:member(Me, Servers) of
5656
true ->
5757
length(TrueResponses) + 1 > length(Servers)/2;
5858
false ->
5959
%% We are about to commit a new configuration that doesn't contain
60-
%% the local leader. We must therefore have responses from a
60+
%% the local leader. We must therefore have responses from a
6161
%% majority of the other servers to have a quorum.
6262
length(TrueResponses) > length(Servers)/2
6363
end.
@@ -101,17 +101,17 @@ reconfig(#config{state=stable}=Config, Servers) ->
101101
-spec allow_config(#config{}, list()) -> boolean().
102102
allow_config(#config{state=blank}, _NewServers) ->
103103
true;
104-
allow_config(#config{state=stable, oldservers=OldServers}, NewServers)
104+
allow_config(#config{state=stable, oldservers=OldServers}, NewServers)
105105
when NewServers =/= OldServers ->
106106
true;
107-
allow_config(#config{oldservers=OldServers}, NewServers)
108-
when NewServers =:= OldServers ->
107+
allow_config(#config{oldservers=OldServers}, NewServers)
108+
when NewServers =:= OldServers ->
109109
{error, not_modified};
110110
allow_config(_Config, _NewServers) ->
111111
{error, config_in_progress}.
112112

113113
%%====================================================================
114-
%% Internal Functions
114+
%% Internal Functions
115115
%%====================================================================
116116

117117
-spec index(atom() | {atom(), atom()}, dict()) -> non_neg_integer().

src/rafter_consensus_fsm.erl

+10-14
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
-define(HEARTBEAT_TIMEOUT, 25).
1313

1414
%% API
15-
-export([start/0, stop/1, start/1, start_link/3, read_op/2, op/2,
15+
-export([start_link/3, stop/1, get_leader/1, read_op/2, op/2,
1616
set_config/2, send/2, send_sync/2]).
1717

1818
%% gen_fsm callbacks
@@ -25,19 +25,11 @@
2525
%% Testing outputs
2626
-export([set_term/2, candidate_log_up_to_date/4]).
2727

28-
%% This function is simply for testing a single peer with erlang transport
29-
start() ->
30-
start(peer1).
31-
3228
stop(Pid) ->
3329
gen_fsm:send_all_state_event(Pid, stop).
3430

35-
start(Me) ->
36-
gen_fsm:start({local, Me}, ?MODULE, [Me], []).
37-
3831
start_link(NameAtom, Me, Opts) ->
3932
gen_fsm:start_link({local, NameAtom}, ?MODULE, [Me, Opts], []).
40-
%%gen_fsm:start_link({local, NameAtom}, ?MODULE, [Me, Opts], [{debug, [trace]}]).
4133

4234
op(Peer, Command) ->
4335
gen_fsm:sync_send_event(Peer, {op, Command}).
@@ -48,13 +40,16 @@ read_op(Peer, Command) ->
4840
set_config(Peer, Config) ->
4941
gen_fsm:sync_send_event(Peer, {set_config, Config}).
5042

43+
get_leader(Pid) ->
44+
gen_fsm:sync_send_all_state_event(Pid, get_leader).
45+
5146
-spec send(atom(), #vote{} | #append_entries_rpy{}) -> ok.
5247
send(To, Msg) ->
5348
%% Catch badarg error thrown if name is unregistered
5449
catch gen_fsm:send_event(To, Msg).
5550

5651
-spec send_sync(atom(), #request_vote{} | #append_entries{}) ->
57-
{ok, #vote{}} | {ok, #append_entries_rpy{}}.
52+
#vote{} | #append_entries_rpy{} | timeout.
5853
send_sync(To, Msg) ->
5954
Timeout=100,
6055
gen_fsm:sync_send_event(To, Msg, Timeout).
@@ -64,7 +59,6 @@ send_sync(To, Msg) ->
6459
%%=============================================================================
6560

6661
init([Me, #rafter_opts{state_machine=StateMachine}]) ->
67-
random:seed(),
6862
Timer = gen_fsm:send_event_after(election_timeout(), timeout),
6963
#meta{voted_for=VotedFor, term=Term} = rafter_log:get_metadata(Me),
7064
BackendState = StateMachine:init(Me),
@@ -95,6 +89,8 @@ handle_event(stop, _, State) ->
9589
handle_event(_Event, _StateName, State) ->
9690
{stop, {error, badmsg}, State}.
9791

92+
handle_sync_event(get_leader, _, StateName, State=#state{leader=Leader}) ->
93+
{reply, Leader, StateName, State};
9894
handle_sync_event(_Event, _From, _StateName, State) ->
9995
{stop, badmsg, State}.
10096

@@ -174,7 +170,7 @@ follower(#append_entries{term=Term, from=From, prev_log_index=PrevLogIndex,
174170
State3 = reset_timer(election_timeout(), State2),
175171
case consistency_check(AppendEntries, State3) of
176172
false ->
177-
lager:info("~p ~p ~n", [AppendEntries, State3]),
173+
ok = lager:info("~p ~p ~n", [AppendEntries, State3]),
178174
{reply, Rpy, follower, State3};
179175
true ->
180176
{ok, CurrentIndex} = rafter_log:check_and_append(Me,
@@ -811,7 +807,7 @@ send_entry(Peer, Index, #state{me=Me,
811807

812808
send_append_entries(#state{followers=Followers, send_clock=SendClock}=State) ->
813809
NewState = State#state{send_clock=SendClock+1},
814-
[send_entry(Peer, Index, NewState) ||
810+
_ = [send_entry(Peer, Index, NewState) ||
815811
{Peer, Index} <- dict:to_list(Followers)],
816812
NewState.
817813

@@ -843,7 +839,7 @@ become_candidate(#state{term=CurrentTerm, me=Me}=State0) ->
843839
responses=dict:new(),
844840
leader=undefined},
845841
State3 = set_metadata(Me, State2),
846-
request_votes(State3),
842+
_ = request_votes(State3),
847843
State3.
848844

849845
become_leader(#state{me=Me, term=Term, init_config=InitConfig}=State) ->

src/rafter_consensus_sup.erl

+1-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
%% Supervisor callbacks
99
-export([init/1]).
1010

11-
-spec start_link(atom() | {atom(), atom()}, atom()) -> ok.
1211
start_link(Me, Opts) when is_atom(Me) ->
1312
SupName = name(Me, "sup"),
1413
start_link(Me, SupName, Me, Opts);
@@ -29,7 +28,7 @@ init([NameAtom, Me, Opts]) ->
2928
{ok, {{one_for_all, 5, 10}, [LogServer, ConsensusFsm]}}.
3029

3130
%% ===================================================================
32-
%% Private Functions
31+
%% Private Functions
3332
%% ===================================================================
3433
name(Name, Extension) ->
3534
list_to_atom(atom_to_list(Name) ++ "_" ++ Extension).

src/rafter_log.erl

+4-4
Original file line numberDiff line numberDiff line change
@@ -258,13 +258,13 @@ maybe_append(Index, Loc, [#rafter_entry{term=Term}=Entry | Entries],
258258
#rafter_entry{index=Index, term=Term} ->
259259
maybe_append(Index+1, NewLocation, Entries, State);
260260
#rafter_entry{index=Index, term=_} ->
261-
truncate(File, Loc),
261+
ok = truncate(File, Loc),
262262
State1 = State#state{write_location=Loc},
263263
State2 = write_entry(Entry, State1),
264264
maybe_append(Index + 1, eof, Entries, State2)
265265
end;
266266
eof ->
267-
truncate(File, Loc),
267+
ok = truncate(File, Loc),
268268
State1 = State#state{write_location=Loc},
269269
State2 = write_entry(Entry, State1),
270270
maybe_append(Index+1, eof, Entries, State2)
@@ -353,7 +353,7 @@ read_metadata(Filename, FileSize) ->
353353
end.
354354

355355
truncate(File, Pos) ->
356-
file:position(File, Pos),
356+
{ok, _} = file:position(File, Pos),
357357
file:truncate(File).
358358

359359
maybe_truncate(File, TruncateAt, FileSize) ->
@@ -373,7 +373,7 @@ repair_file(File, Size) ->
373373
{ok, ConfigStart, Term, Index, TruncateAt};
374374
not_found ->
375375
io:format("NOT FOUND: Size = ~p~n", [Size]),
376-
truncate(File, 0),
376+
ok = truncate(File, 0),
377377
empty_file
378378
end.
379379

src/rafter_requester.erl

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ send(To, #append_entries{from=From}=Msg) ->
1414
send(To, From, Msg) ->
1515
spawn(fun() ->
1616
case rafter_consensus_fsm:send_sync(To, Msg) of
17-
Rpy when is_record(Rpy, vote) orelse
18-
is_record(Rpy, append_entries_rpy) ->
17+
Rpy when is_record(Rpy, vote) orelse
18+
is_record(Rpy, append_entries_rpy) ->
1919
rafter_consensus_fsm:send(From, Rpy);
2020
E ->
2121
lager:error("Error sending ~p to To ~p: ~p", [Msg, To, E])

src/rafter_sup.erl

+9-6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
-behaviour(supervisor).
44

5+
-include("rafter_opts.hrl").
6+
57
%% API
68
-export([start_link/0, start_peer/2, stop_peer/1]).
79

@@ -15,11 +17,12 @@
1517
start_link() ->
1618
supervisor:start_link({local, ?MODULE}, ?MODULE, []).
1719

18-
%% @doc Start an individual peer. In production, this will only be called once
19-
%% on each machine with node/local name semantics.
20-
%% For testing, this allows us to start 5 nodes in one erlang VM and
20+
%% @doc Start an individual peer. In production, this will only be called once
21+
%% on each machine with node/local name semantics.
22+
%% For testing, this allows us to start 5 nodes in one erlang VM and
2123
%% communicate with local names.
22-
-spec start_peer(atom() | {atom(), atom()}, atom()) -> ok.
24+
-spec start_peer(atom() | {atom(), atom()}, #rafter_opts{}) ->
25+
{'error',_} | {'ok','undefined' | pid()} | {'ok','undefined' | pid(),_}.
2326
start_peer(Me, Opts) when is_atom(Me) ->
2427
SupName = consensus_sup(Me),
2528
start_child(SupName, Me, Opts);
@@ -45,7 +48,7 @@ init([]) ->
4548
{ok, { {one_for_one, 5, 10}, []} }.
4649

4750
%% ===================================================================
48-
%% Private Functions
51+
%% Private Functions
4952
%% ===================================================================
5053
consensus_sup(Peer) ->
5154
list_to_atom(atom_to_list(Peer) ++ "_consensus_sup").
@@ -57,7 +60,7 @@ start_child(SupName, Me, Opts) ->
5760
supervisor:start_child(?MODULE, ConsensusSup).
5861

5962
stop_child(ChildId) ->
60-
supervisor:terminate_child(?MODULE, ChildId),
63+
ok = supervisor:terminate_child(?MODULE, ChildId),
6164
%% A big meh to OTP supervisor child handling. Just delete so start works
6265
%% again.
6366
supervisor:delete_child(?MODULE, ChildId).

0 commit comments

Comments
 (0)