summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBrad Anderson <brad@cloudant.com>2010-05-19 16:35:37 -0400
committerBrad Anderson <brad@cloudant.com>2010-05-19 16:35:37 -0400
commitdcb044f31136a4f8f19caab19e003b2e0352bc2f (patch)
treecbe2576433ff323d8adaf595f4486b2375c5e96e /src
parent151b4400ed229f2820364cd0cf83a550fd602914 (diff)
mem3 code for node replacement
Diffstat (limited to 'src')
-rw-r--r--src/mem3.erl10
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