diff options
author | Brad Anderson <brad@cloudant.com> | 2010-05-27 11:41:03 -0400 |
---|---|---|
committer | Brad Anderson <brad@cloudant.com> | 2010-05-27 11:41:03 -0400 |
commit | cdec6e0fb82f862f7c7d0c712535a712cdc683d5 (patch) | |
tree | b50dc8e5bea55b69d972776a736d9441c9e3960f /src/mem3.erl | |
parent | 63c0e5eac30acbb6ed8926dc5dfbf5157f416369 (diff) |
allow for single-node cluster 'init'
Diffstat (limited to 'src/mem3.erl')
-rw-r--r-- | src/mem3.erl | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/mem3.erl b/src/mem3.erl index d5a96605..11c39ef7 100644 --- a/src/mem3.erl +++ b/src/mem3.erl @@ -386,13 +386,17 @@ gossip(#mem{args=Args} = NewState) -> -spec gossip(test(), mem_state()) -> mem_state(). gossip(undefined, #mem{nodes=StateNodes} = State) -> {_, Nodes, _} = lists:unzip3(StateNodes), - TargetNode = next_up_node(Nodes), - showroom_log:message(info, "membership: firing gossip from ~p to ~p", - [node(), TargetNode]), - case gen_server:call({?SERVER, TargetNode}, {gossip, State}) of - ok -> State; - {new_state, NewState} -> NewState; - Error -> throw({unknown_gossip_response, Error}) + case next_up_node(Nodes) of + no_gossip_targets_available -> + State; % skip gossip, I'm the only node + TargetNode -> + showroom_log:message(info, "membership: firing gossip from ~p to ~p", + [node(), TargetNode]), + case gen_server:call({?SERVER, TargetNode}, {gossip, State}) of + ok -> State; + {new_state, NewState} -> NewState; + Error -> throw({unknown_gossip_response, Error}) + end end; gossip(_,_) -> @@ -411,7 +415,7 @@ next_up_node(Node, Nodes, UpNodes) -> DownNodes = Nodes -- UpNodes, case List -- DownNodes of [Target|_] -> Target; - [] -> throw({error, no_gossip_targets_available}) + [] -> no_gossip_targets_available end. |