diff options
author | Matthias Radestock <matthias@lshift.net> | 2008-07-12 11:06:07 +0100 |
---|---|---|
committer | Matthias Radestock <matthias@lshift.net> | 2008-07-12 11:06:07 +0100 |
commit | 8764bf5a85b5281a372889b9e0780405de47662b (patch) | |
tree | c2ce44a92e727778b429f1bdb5ccd0a33e27531f | |
parent | 2538ff288eb028235049b47c524fff53747a1a6e (diff) | |
download | rabbitmq-server-8764bf5a85b5281a372889b9e0780405de47662b.tar.gz |
proper use of #realm_resource{}
-rw-r--r-- | src/rabbit_mnesia.erl | 4 | ||||
-rw-r--r-- | src/rabbit_realm.erl | 36 |
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, |