diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2014-04-21 13:25:03 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2014-04-21 13:25:03 +0100 |
commit | 0dd70b401502903206fcdd91216b4c1769a446ae (patch) | |
tree | b7e3987d7f6e9aa7195b3b017a293e62ce5c24d7 | |
parent | c38a44c55b42f87797dc17e4cea0e96b6a640b5c (diff) | |
download | rabbitmq-server-0dd70b401502903206fcdd91216b4c1769a446ae.tar.gz |
refactor: tweak and push through gm read_group abstraction
-rw-r--r-- | src/gm.erl | 23 |
1 files changed, 13 insertions, 10 deletions
@@ -1086,7 +1086,11 @@ dirty_read_group(GroupName) -> [Group] -> Group end. -read_group(GroupName) -> mnesia:read({?GROUP_TABLE, GroupName}). +read_group(GroupName) -> + case mnesia:read({?GROUP_TABLE, GroupName}) of + [] -> {error, not_found}; + [Group] -> Group + end. write_group(Group) -> mnesia:write(?GROUP_TABLE, Group, write), Group. @@ -1097,9 +1101,9 @@ prune_or_create_group(Self, GroupName, TxnFun) -> members = [Self], version = get_version(Self) }, case read_group(GroupName) of - [] -> + {error, not_found} -> write_group(GroupNew); - [Group = #gm_group { members = Members }] -> + Group = #gm_group { members = Members } -> case lists:any(fun is_member_alive/1, Members) of true -> Group; false -> write_group(GroupNew) @@ -1109,8 +1113,8 @@ prune_or_create_group(Self, GroupName, TxnFun) -> record_dead_member_in_group(Member, GroupName, TxnFun) -> TxnFun( - fun () -> [Group = #gm_group { members = Members, version = Ver }] = - mnesia:read({?GROUP_TABLE, GroupName}), + fun () -> Group = #gm_group { members = Members, version = Ver } = + read_group(GroupName), case lists:splitwith( fun (Member1) -> Member1 =/= Member end, Members) of {_Members1, []} -> %% not found - already recorded dead @@ -1125,8 +1129,8 @@ record_dead_member_in_group(Member, GroupName, TxnFun) -> record_new_member_in_group(GroupName, Left, NewMember, Fun, TxnFun) -> TxnFun( fun () -> - [Group = #gm_group { members = Members, version = Ver }] = - mnesia:read({?GROUP_TABLE, GroupName}), + Group = #gm_group { members = Members, version = Ver } = + read_group(GroupName), {Prefix, [Left | Suffix]} = lists:splitwith(fun (M) -> M =/= Left end, Members), Group1 = Group #gm_group { @@ -1139,9 +1143,8 @@ erase_members_in_group(Members, GroupName, TxnFun) -> DeadMembers = [{dead, Id} || Id <- Members], TxnFun( fun () -> - [Group = #gm_group { members = [_|_] = Members1, - version = Ver }] = - mnesia:read({?GROUP_TABLE, GroupName}), + Group = #gm_group { members = [_|_] = Members1, version = Ver } = + read_group(GroupName), case Members1 -- DeadMembers of Members1 -> Group; Members2 -> write_group( |