diff options
| author | Simon MacMullen <simon@rabbitmq.com> | 2014-05-12 18:29:50 +0100 |
|---|---|---|
| committer | Simon MacMullen <simon@rabbitmq.com> | 2014-05-12 18:29:50 +0100 |
| commit | 99be0e0d4a0af914efdb9610b1e2172d4271fa9c (patch) | |
| tree | a2783f8a06c88c7ff894e02e5cf6a9f675510e17 /src | |
| parent | fcb6c0de33a961df2a545d4d67c8778351e0b0bc (diff) | |
| download | rabbitmq-server-git-99be0e0d4a0af914efdb9610b1e2172d4271fa9c.tar.gz | |
Abstract the initial catchup into its own function. Make sure we call check_neighbours beforehand, since that sets left and right.
Diffstat (limited to 'src')
| -rw-r--r-- | src/gm.erl | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/gm.erl b/src/gm.erl index 6338f94705..7468de1587 100644 --- a/src/gm.erl +++ b/src/gm.erl @@ -653,18 +653,17 @@ handle_cast(join, State = #state { self = Self, module = Module, callback_args = Args, txn_executor = TxnFun }) -> - State1 = check_neighbours( - case join_group(Self, GroupName, TxnFun) of - {ok, View} -> + State1 = case join_group(Self, GroupName, TxnFun) of + {ok, View} -> + check_neighbours( State#state{view = View, - members_state = blank_member_state()}; - {ok, View, Left, MembersState} -> - {ok, State2} = handle_msg({catchup, Left, MembersState}, - State), - State2#state{view = View} - end), - handle_callback_result( - {Module:joined(Args, get_pids(all_known_members(View))), State1}); + members_state = blank_member_state()}); + {ok, View, Left, MembersState} -> + initial_catchup(Left, MembersState, + check_neighbours(State#state{view = View})) + end, + Members = get_pids(all_known_members(State1#state.view)), + handle_callback_result({Module:joined(Args, Members), State1}); handle_cast({validate_members, OldMembers}, State = #state { view = View, @@ -740,21 +739,21 @@ prioritise_info(_, _Len, _State) -> 0. +initial_catchup(Left, MembersStateLeft, + State = #state { self = Self, + left = {Left, _MRefL}, + right = {Right, _MRefR}, + view = View, + members_state = undefined }) -> + ok = send_right(Right, View, {catchup, Self, MembersStateLeft}), + MembersStateLeft1 = build_members_state(MembersStateLeft), + State #state { members_state = MembersStateLeft1 }. + handle_msg(check_neighbours, State) -> %% no-op - it's already been done by the calling handle_cast {ok, State}; handle_msg({catchup, Left, MembersStateLeft}, - State = #state { self = Self, - left = {Left, _MRefL}, - right = {Right, _MRefR}, - view = View, - members_state = undefined }) -> - ok = send_right(Right, View, {catchup, Self, MembersStateLeft}), - MembersStateLeft1 = build_members_state(MembersStateLeft), - {ok, State #state { members_state = MembersStateLeft1 }}; - -handle_msg({catchup, Left, MembersStateLeft}, State = #state { self = Self, left = {Left, _MRefL}, view = View, |
