summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2014-05-12 18:29:50 +0100
committerSimon MacMullen <simon@rabbitmq.com>2014-05-12 18:29:50 +0100
commit99be0e0d4a0af914efdb9610b1e2172d4271fa9c (patch)
treea2783f8a06c88c7ff894e02e5cf6a9f675510e17
parentfcb6c0de33a961df2a545d4d67c8778351e0b0bc (diff)
downloadrabbitmq-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.
-rw-r--r--src/gm.erl41
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,