diff options
| author | Brad Anderson <brad@cloudant.com> | 2010-05-19 16:35:37 -0400 | 
|---|---|---|
| committer | Brad Anderson <brad@cloudant.com> | 2010-05-19 16:35:37 -0400 | 
| commit | dcb044f31136a4f8f19caab19e003b2e0352bc2f (patch) | |
| tree | cbe2576433ff323d8adaf595f4486b2375c5e96e | |
| parent | 151b4400ed229f2820364cd0cf83a550fd602914 (diff) | |
mem3 code for node replacement
| -rw-r--r-- | src/mem3.erl | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/src/mem3.erl b/src/mem3.erl index 33257c40..81a383c2 100644 --- a/src/mem3.erl +++ b/src/mem3.erl @@ -305,9 +305,13 @@ handle_join(join, ExtNodes, PingNode, #mem{args=Args} = State) ->      % now use this info to join the ring      int_join(ExtNodes, NewState); -handle_join(replace, [_OldNode | _], _PingNode, _State) -> -    % TODO implement me -    ok; +handle_join(replace, [OldNode | _], PingNode, State) -> +    handle_join(replace, {OldNode, []}, PingNode, State); +handle_join(replace, {OldNode, NewOpts}, PingNode, _State) -> +    OldState = #mem{nodes=OldNodes} = get_pingnode_state(PingNode), +    {Order, OldNode, _OldOpts} = lists:keyfind(OldNode, 2, OldNodes), +    NewNodes = lists:keyreplace(OldNode, 2, OldNodes, {Order, node(), NewOpts}), +    int_join([], OldState#mem{nodes=NewNodes});  handle_join(leave, [_OldNode | _], _PingNode, _State) ->      % TODO implement me | 
