Skip to content

Commit fab78c5

Browse files
committed
refactor: extract gm view change handling
1 parent 7e06dab commit fab78c5

File tree

1 file changed

+18
-29
lines changed

1 file changed

+18
-29
lines changed

src/gm.erl

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -605,36 +605,27 @@ handle_call({add_on_right, _NewMember}, _From,
605605
handle_call({add_on_right, NewMember}, _From,
606606
State = #state { self = Self,
607607
group_name = GroupName,
608-
view = View,
609608
members_state = MembersState,
610-
module = Module,
611-
callback_args = Args,
612609
txn_executor = TxnFun }) ->
613610
Group = record_new_member_in_group(NewMember, Self, GroupName, TxnFun),
614611
View1 = group_to_view(Group),
615612
MembersState1 = remove_erased_members(MembersState, View1),
616613
ok = send_right(NewMember, View1,
617614
{catchup, Self, prepare_members_state(MembersState1)}),
618-
handle_callback_result(
619-
{callback_view_changed(Args, Module, View, View1),
620-
{ok, Group},
621-
check_neighbours(State #state { view = View1,
622-
members_state = MembersState1 })}).
615+
{Result, State1} = change_view(View1, State #state {
616+
members_state = MembersState1 }),
617+
handle_callback_result({Result, {ok, Group}, State1}).
623618

624619
handle_cast({?TAG, ReqVer, Msg},
625620
State = #state { view = View,
626621
members_state = MembersState,
627-
group_name = GroupName,
628-
module = Module,
629-
callback_args = Args }) ->
622+
group_name = GroupName }) ->
630623
{Result, State1} =
631624
case needs_view_update(ReqVer, View) of
632625
true -> View1 = group_to_view(dirty_read_group(GroupName)),
633626
MemberState1 = remove_erased_members(MembersState, View1),
634-
{callback_view_changed(Args, Module, View, View1),
635-
check_neighbours(
636-
State #state { view = View1,
637-
members_state = MemberState1 })};
627+
change_view(View1, State #state {
628+
members_state = MemberState1 });
638629
false -> {ok, State}
639630
end,
640631
handle_callback_result(
@@ -1148,10 +1139,7 @@ erase_members_in_group(Members, GroupName, TxnFun) ->
11481139

11491140
maybe_erase_aliases(State = #state { self = Self,
11501141
group_name = GroupName,
1151-
view = View0,
11521142
members_state = MembersState,
1153-
module = Module,
1154-
callback_args = Args,
11551143
txn_executor = TxnFun }, View) ->
11561144
#view_member { aliases = Aliases } = fetch_view_member(Self, View),
11571145
{Erasable, MembersState1}
@@ -1170,9 +1158,7 @@ maybe_erase_aliases(State = #state { self = Self,
11701158
_ -> group_to_view(
11711159
erase_members_in_group(Erasable, GroupName, TxnFun))
11721160
end,
1173-
State1 = State #state { members_state = MembersState1, view = View1 },
1174-
{callback_view_changed(Args, Module, View0, View1),
1175-
check_neighbours(State1)}.
1161+
change_view(View1, State #state { members_state = MembersState1 }).
11761162

11771163
can_erase_view_member(Self, Self, _LA, _LP) -> false;
11781164
can_erase_view_member(_Self, _Id, N, N) -> true;
@@ -1370,16 +1356,19 @@ callback(Args, Module, Activity) ->
13701356
{stop, _Reason} = Error -> Error
13711357
end.
13721358

1373-
callback_view_changed(Args, Module, OldView, NewView) ->
1374-
OldMembers = all_known_members(OldView),
1375-
NewMembers = all_known_members(NewView),
1359+
change_view(View, State = #state { view = View0,
1360+
module = Module,
1361+
callback_args = Args }) ->
1362+
OldMembers = all_known_members(View0),
1363+
NewMembers = all_known_members(View),
13761364
Births = NewMembers -- OldMembers,
13771365
Deaths = OldMembers -- NewMembers,
1378-
case {Births, Deaths} of
1379-
{[], []} -> ok;
1380-
_ -> Module:members_changed(
1381-
Args, get_pids(Births), get_pids(Deaths))
1382-
end.
1366+
Result = case {Births, Deaths} of
1367+
{[], []} -> ok;
1368+
_ -> Module:members_changed(
1369+
Args, get_pids(Births), get_pids(Deaths))
1370+
end,
1371+
{Result, check_neighbours(State #state { view = View })}.
13831372

13841373
handle_callback_result({Result, State}) ->
13851374
if_callback_success(

0 commit comments

Comments
 (0)