Skip to content

Commit

Permalink
Merge branches 'emacs-makefile', 'kill-imports-consistency' and 'read…
Browse files Browse the repository at this point in the history
…me-description'
  • Loading branch information
jlouis committed Aug 23, 2010
3 parents 592e467 + 4f8c4f7 + 977a8ae commit 5d349d0
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 24 deletions.
8 changes: 7 additions & 1 deletion README.markdown
Expand Up @@ -14,7 +14,13 @@ Use the version in combined_version.
What Exactly Does It Do?
========================

Let us get back to you on that.
Leader election behavior.
-------------------------

This application implements a leader election behavior modeled after
gen_server. This behavior intends to make it reasonably
straightforward to implement a fully distributed server with
master-slave semantics.

Current Participants
====================
Expand Down
39 changes: 16 additions & 23 deletions src/gen_leader.erl
Expand Up @@ -106,14 +106,6 @@
print_event/3
]).

-import(error_logger , [format/2]).

-import(lists, [foldl/3,
foreach/2,
member/2,
keydelete/3,
keysearch/3]).

-record(election, {
leader = none,
previous_leader = none,
Expand Down Expand Up @@ -385,10 +377,10 @@ init_it(Starter,Parent,Name,Mod,{CandidateNodes,OptArgs,Arg},Options) ->
BcastType = proplists:get_value(bcast_type,OptArgs, sender),
Seed = proplists:get_value(seed, OptArgs, none),
Debug = debug_options(Name, Options),
AmCandidate = case member(node(), CandidateNodes) of
AmCandidate = case lists:member(node(), CandidateNodes) of
true -> true;
false ->
case member(node(), Workers) of
case lists:member(node(), Workers) of
true -> false;
false ->
Seed =/= none
Expand All @@ -404,7 +396,7 @@ init_it(Starter,Parent,Name,Mod,{CandidateNodes,OptArgs,Arg},Options) ->
bcast_type = BcastType
},

case {AmCandidate, member(node(), Workers)} of
case {AmCandidate, lists:member(node(), Workers)} of
{false, false} ->
%% I am neither a candidate nor a worker - don't start this process
error_logger:warning_msg("~w not started - node is not a candidate/worker\n", [Name]),
Expand Down Expand Up @@ -746,7 +738,7 @@ loop(#server{parent = Parent,
case (self() == E#election.leader) of
true ->
NewCandidates =
case member(node(From), candidates(E)) of
case lists:member(node(From), candidates(E)) of
true -> candidates(E);
false ->
NC = candidates(E) ++ [node(From)],
Expand Down Expand Up @@ -998,9 +990,10 @@ handle_msg({'$leader_call', From, Request} = Msg, Server, Role,
loop(Server, Role, E#election{buffered = NewBuffered},Msg);
handle_msg({Ref, {leader,reply,Reply}} = Msg, Server, Role,
#election{buffered = Buffered} = E) ->
{value, {_,From}} = keysearch(Ref,1,Buffered),
{value, {_,From}} = lists:keysearch(Ref,1,Buffered),
NewServer = reply(From, {leader,reply,Reply}, Server, Role,
E#election{buffered = keydelete(Ref,1,Buffered)}),
E#election{buffered =
lists:keydelete(Ref,1,Buffered)}),
loop(NewServer, Role, E, Msg);
handle_msg({'$gen_call', From, get_candidates} = Msg, Server, Role, E) ->
NewServer = reply(From, {ok, candidates(E)}, Server, Role, E),
Expand Down Expand Up @@ -1112,11 +1105,11 @@ terminate(Reason, Msg, #server{mod = Mod,

%% Maybe we shouldn't do this? We have the crash report...
error_info(Reason, Name, Msg, State, Debug) ->
format("** Generic leader ~p terminating \n"
"** Last message in was ~p~n"
"** When Server state == ~p~n"
"** Reason for termination == ~n** ~p~n",
[Name, Msg, State, Reason]),
error_logger:format("** Generic leader ~p terminating \n"
"** Last message in was ~p~n"
"** When Server state == ~p~n"
"** Reason for termination == ~n** ~p~n",
[Name, Msg, State, Reason]),
sys:print_log(Debug),
ok.

Expand Down Expand Up @@ -1152,8 +1145,8 @@ dbg_options(Name, Opts) ->
dbg_opts(Name, Opts) ->
case catch sys:debug_options(Opts) of
{'EXIT',_} ->
format("~p: ignoring erroneous debug options - ~p~n",
[Name, Opts]),
error_logger:format("~p: ignoring erroneous debug options - ~p~n",
[Name, Opts]),
[];
Dbg ->
Dbg
Expand Down Expand Up @@ -1318,7 +1311,7 @@ broadcast(Msg, #election{monitored = Monitored} = E) ->
broadcast(Msg, ToNodes, E).

broadcast({from_leader, Msg}, ToNodes, E) ->
foreach(
lists:foreach(
fun(Node) ->
{E#election.name,Node} ! {from_leader, Msg}
end,ToNodes),
Expand Down Expand Up @@ -1382,7 +1375,7 @@ mon_nodes(E,Nodes,Server) ->
E
end,
FromNode = node(),
foldl(
lists:foldl(
fun(ToNode,El) ->
Pid = {El#election.name, ToNode},
Pid ! {heartbeat, FromNode},
Expand Down

0 comments on commit 5d349d0

Please sign in to comment.