summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Anderson <brad@cloudant.com>2010-04-23 23:25:05 -0400
committerBrad Anderson <brad@cloudant.com>2010-05-09 22:56:24 -0400
commit0e88f2bd418737f9df5383b82811b07135e179c8 (patch)
tree66dab95f9cac2677ba11b96b75142875038d3b08 /src
parentf37f2fb12a65fc5ca5ab7bcc6e9f5272e0570fc9 (diff)
remote node should receive gossip if their clock was less than local
Diffstat (limited to 'src')
-rw-r--r--src/mem3.erl9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/mem3.erl b/src/mem3.erl
index 211fdf08..cec2631c 100644
--- a/src/mem3.erl
+++ b/src/mem3.erl
@@ -321,13 +321,16 @@ int_join(JoinType, ExtNodes, #mem{node=Node, nodes=Nodes, clock=Clock} = State,
%% @doc handle the gossip messages
%% We're not using vector_clock:resolve b/c we need custom merge strategy
-handle_gossip(RemoteState=#mem{clock=RemoteClock},
+handle_gossip(RemoteState=#mem{clock=RemoteClock, node=RemoteNode},
LocalState=#mem{clock=LocalClock}) ->
case vector_clock:compare(RemoteClock, LocalClock) of
equal -> LocalState;
- less -> LocalState;
+ less ->
+ % remote node needs updating
+ gen_server:cast({?SERVER, RemoteNode}, {gossip, LocalState}),
+ LocalState;
greater ->
- % this node needs updating
+ % local node needs updating
new_state(RemoteState);
concurrent ->
% ick, so let's resolve and merge states