simplify: get rid of tmp var
This commit is contained in:
parent
aa2f796b06
commit
9ad70e9640
41
src/gm.erl
41
src/gm.erl
|
@ -1091,7 +1091,7 @@ read_group(GroupName) -> mnesia:read({?GROUP_TABLE, GroupName}).
|
||||||
write_group(Group) -> mnesia:write(?GROUP_TABLE, Group, write), Group.
|
write_group(Group) -> mnesia:write(?GROUP_TABLE, Group, write), Group.
|
||||||
|
|
||||||
prune_or_create_group(Self, GroupName, TxnFun) ->
|
prune_or_create_group(Self, GroupName, TxnFun) ->
|
||||||
Group = TxnFun(
|
TxnFun(
|
||||||
fun () ->
|
fun () ->
|
||||||
GroupNew = #gm_group { name = GroupName,
|
GroupNew = #gm_group { name = GroupName,
|
||||||
members = [Self],
|
members = [Self],
|
||||||
|
@ -1099,63 +1099,56 @@ prune_or_create_group(Self, GroupName, TxnFun) ->
|
||||||
case read_group(GroupName) of
|
case read_group(GroupName) of
|
||||||
[] ->
|
[] ->
|
||||||
write_group(GroupNew);
|
write_group(GroupNew);
|
||||||
[Group1 = #gm_group { members = Members }] ->
|
[Group = #gm_group { members = Members }] ->
|
||||||
case lists:any(fun is_member_alive/1, Members) of
|
case lists:any(fun is_member_alive/1, Members) of
|
||||||
true -> Group1;
|
true -> Group;
|
||||||
false -> write_group(GroupNew)
|
false -> write_group(GroupNew)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end),
|
end).
|
||||||
Group.
|
|
||||||
|
|
||||||
record_dead_member_in_group(Member, GroupName, TxnFun) ->
|
record_dead_member_in_group(Member, GroupName, TxnFun) ->
|
||||||
Group =
|
|
||||||
TxnFun(
|
TxnFun(
|
||||||
fun () -> [Group1 = #gm_group { members = Members, version = Ver }] =
|
fun () -> [Group = #gm_group { members = Members, version = Ver }] =
|
||||||
mnesia:read({?GROUP_TABLE, GroupName}),
|
mnesia:read({?GROUP_TABLE, GroupName}),
|
||||||
case lists:splitwith(
|
case lists:splitwith(
|
||||||
fun (Member1) -> Member1 =/= Member end, Members) of
|
fun (Member1) -> Member1 =/= Member end, Members) of
|
||||||
{_Members1, []} -> %% not found - already recorded dead
|
{_Members1, []} -> %% not found - already recorded dead
|
||||||
Group1;
|
Group;
|
||||||
{Members1, [Member | Members2]} ->
|
{Members1, [Member | Members2]} ->
|
||||||
Members3 = Members1 ++ [{dead, Member} | Members2],
|
Members3 = Members1 ++ [{dead, Member} | Members2],
|
||||||
write_group(Group1 #gm_group { members = Members3,
|
write_group(Group #gm_group { members = Members3,
|
||||||
version = Ver + 1 })
|
version = Ver + 1 })
|
||||||
end
|
end
|
||||||
end),
|
end).
|
||||||
Group.
|
|
||||||
|
|
||||||
record_new_member_in_group(GroupName, Left, NewMember, Fun, TxnFun) ->
|
record_new_member_in_group(GroupName, Left, NewMember, Fun, TxnFun) ->
|
||||||
{Result, Group} =
|
|
||||||
TxnFun(
|
TxnFun(
|
||||||
fun () ->
|
fun () ->
|
||||||
[#gm_group { members = Members, version = Ver } = Group1] =
|
[Group = #gm_group { members = Members, version = Ver }] =
|
||||||
mnesia:read({?GROUP_TABLE, GroupName}),
|
mnesia:read({?GROUP_TABLE, GroupName}),
|
||||||
{Prefix, [Left | Suffix]} =
|
{Prefix, [Left | Suffix]} =
|
||||||
lists:splitwith(fun (M) -> M =/= Left end, Members),
|
lists:splitwith(fun (M) -> M =/= Left end, Members),
|
||||||
Members1 = Prefix ++ [Left, NewMember | Suffix],
|
Group1 = Group #gm_group {
|
||||||
Group2 = Group1 #gm_group { members = Members1,
|
members = Prefix ++ [Left, NewMember | Suffix],
|
||||||
version = Ver + 1 },
|
version = Ver + 1 },
|
||||||
{Fun(Group2), write_group(Group2)}
|
{Fun(Group1), write_group(Group1)}
|
||||||
end),
|
end).
|
||||||
{Result, Group}.
|
|
||||||
|
|
||||||
erase_members_in_group(Members, GroupName, TxnFun) ->
|
erase_members_in_group(Members, GroupName, TxnFun) ->
|
||||||
DeadMembers = [{dead, Id} || Id <- Members],
|
DeadMembers = [{dead, Id} || Id <- Members],
|
||||||
Group =
|
|
||||||
TxnFun(
|
TxnFun(
|
||||||
fun () ->
|
fun () ->
|
||||||
[Group1 = #gm_group { members = [_|_] = Members1,
|
[Group = #gm_group { members = [_|_] = Members1,
|
||||||
version = Ver }] =
|
version = Ver }] =
|
||||||
mnesia:read({?GROUP_TABLE, GroupName}),
|
mnesia:read({?GROUP_TABLE, GroupName}),
|
||||||
case Members1 -- DeadMembers of
|
case Members1 -- DeadMembers of
|
||||||
Members1 -> Group1;
|
Members1 -> Group;
|
||||||
Members2 -> write_group(
|
Members2 -> write_group(
|
||||||
Group1 #gm_group { members = Members2,
|
Group #gm_group { members = Members2,
|
||||||
version = Ver + 1 })
|
version = Ver + 1 })
|
||||||
end
|
end
|
||||||
end),
|
end).
|
||||||
Group.
|
|
||||||
|
|
||||||
maybe_erase_aliases(State = #state { self = Self,
|
maybe_erase_aliases(State = #state { self = Self,
|
||||||
group_name = GroupName,
|
group_name = GroupName,
|
||||||
|
|
Loading…
Reference in New Issue