From dcb044f31136a4f8f19caab19e003b2e0352bc2f Mon Sep 17 00:00:00 2001 From: Brad Anderson Date: Wed, 19 May 2010 16:35:37 -0400 Subject: mem3 code for node replacement --- src/mem3.erl | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') 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 -- cgit v1.2.3