summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@lshift.net>2008-07-12 11:06:07 +0100
committerMatthias Radestock <matthias@lshift.net>2008-07-12 11:06:07 +0100
commit8764bf5a85b5281a372889b9e0780405de47662b (patch)
treec2ce44a92e727778b429f1bdb5ccd0a33e27531f
parent2538ff288eb028235049b47c524fff53747a1a6e (diff)
downloadrabbitmq-server-8764bf5a85b5281a372889b9e0780405de47662b.tar.gz
proper use of #realm_resource{}
-rw-r--r--src/rabbit_mnesia.erl4
-rw-r--r--src/rabbit_realm.erl36
2 files changed, 25 insertions, 15 deletions
diff --git a/src/rabbit_mnesia.erl b/src/rabbit_mnesia.erl
index f18f3d50..18df11fe 100644
--- a/src/rabbit_mnesia.erl
+++ b/src/rabbit_mnesia.erl
@@ -109,9 +109,11 @@ table_definitions() ->
{realm, [{disc_copies, [node()]},
{attributes, record_info(fields, realm)}]},
{realm_exchange, [{disc_copies, [node()]},
+ {record_name, realm_resource},
{attributes, record_info(fields, realm_resource)}]},
{realm_queue, [{disc_copies, [node()]},
- {attributes, record_info(fields, realm_resource)}]},
+ {record_name, realm_resource},
+ {attributes, record_info(fields, realm_resource)}]},
{user_realm, [{type, bag},
{disc_copies, [node()]},
{attributes, record_info(fields, user_realm)},
diff --git a/src/rabbit_realm.erl b/src/rabbit_realm.erl
index b2c721fc..4bd6db84 100644
--- a/src/rabbit_realm.erl
+++ b/src/rabbit_realm.erl
@@ -110,20 +110,22 @@ list_vhost_realms(VHostPath) ->
fun () -> mnesia:read({vhost_realm, VHostPath}) end))].
add(Realm = #resource{kind = realm}, Resource = #resource{}) ->
- manage_link(fun mnesia:write/1, Realm, Resource).
+ manage_link(fun mnesia:write/3, Realm, Resource).
delete(Realm = #resource{kind = realm}, Resource = #resource{}) ->
- manage_link(fun mnesia:delete_object/1, Realm, Resource).
+ manage_link(fun mnesia:delete_object/3, Realm, Resource).
% This links or unlinks a resource to a realm
manage_link(Action, Realm = #resource{kind = realm, name = RealmName},
R = #resource{name = Name}) ->
- Table = realm_table_for_resource(R),
rabbit_misc:execute_mnesia_transaction(
fun () ->
case mnesia:read({realm, Realm}) of
- [] -> mnesia:abort(not_found);
- [_] -> Action({Table, RealmName, Name})
+ [] -> mnesia:abort(not_found);
+ [_] -> Action(realm_table_for_resource(R),
+ #realm_resource{realm = RealmName,
+ resource = Name},
+ write)
end
end).
@@ -134,15 +136,18 @@ parent_table_for_resource(#resource{kind = queue}) -> amqqueue.
check(#resource{kind = realm, name = Realm}, R = #resource{name = Name}) ->
- case mnesia:dirty_match_object(
- {realm_table_for_resource(R), Realm, Name}) of
+ case mnesia:dirty_match_object(realm_table_for_resource(R),
+ #realm_resource{realm = Realm,
+ resource = Name}) of
[] -> false;
_ -> true
end.
% Requires a mnesia transaction.
delete_from_all(R = #resource{name = Name}) ->
- mnesia:delete_object({realm_table_for_resource(R), '_', Name}).
+ mnesia:delete_object(realm_table_for_resource(R),
+ #realm_resource{realm = '_', resource = Name},
+ write).
access_request(Username, Exclusive, Ticket = #ticket{realm_name = RealmName})
when is_binary(Username) ->
@@ -233,22 +238,25 @@ preen_realms() ->
preen_realm(Kind) ->
R = #resource{kind = Kind},
- LinkType = realm_table_for_resource(R),
+ Table = realm_table_for_resource(R),
Cursor = qlc:cursor(
qlc:q([L#realm_resource.resource ||
- L <- mnesia:table(LinkType)])),
- preen_next(Cursor, LinkType, parent_table_for_resource(R)),
+ L <- mnesia:table(Table)])),
+ preen_next(Cursor, Table, parent_table_for_resource(R)),
qlc:delete_cursor(Cursor).
-preen_next(Cursor, LinkType, ParentTable) ->
+preen_next(Cursor, Table, ParentTable) ->
case qlc:next_answers(Cursor, 1) of
[] -> ok;
[Name] ->
case mnesia:read({ParentTable, Name}) of
- [] -> mnesia:delete_object({LinkType, '_', Name});
+ [] -> mnesia:delete_object(
+ Table,
+ #realm_resource{realm = '_', resource = Name},
+ write);
_ -> ok
end,
- preen_next(Cursor, LinkType, ParentTable)
+ preen_next(Cursor, Table, ParentTable)
end.
check_and_lookup(RealmName = #resource{kind = realm,