diff options
author | Brad Anderson <brad@cloudant.com> | 2010-04-23 23:25:05 -0400 |
---|---|---|
committer | Brad Anderson <brad@cloudant.com> | 2010-05-09 22:56:24 -0400 |
commit | 0e88f2bd418737f9df5383b82811b07135e179c8 (patch) | |
tree | 66dab95f9cac2677ba11b96b75142875038d3b08 /src | |
parent | f37f2fb12a65fc5ca5ab7bcc6e9f5272e0570fc9 (diff) |
remote node should receive gossip if their clock was less than local
Diffstat (limited to 'src')
-rw-r--r-- | src/mem3.erl | 9 |
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 |