mod_mam: Don't use transactions for read access

It shouldn't be necessary to query the archive in transaction context.
In dirty context, the mam_meta data might be outdated when the mam_msg
table is queried, but the effects will be harmless.
This commit is contained in:
Holger Weiss 2015-02-13 00:13:02 +01:00
parent 289f2f2b1d
commit c825f6deea
1 changed files with 3 additions and 5 deletions

View File

@ -929,9 +929,7 @@ send_fin_message(#jid{lserver = Host} = JID, QueryID,
-spec query_archive(mam_query(), db_type()) -> mam_result() | {error, _}. -spec query_archive(mam_query(), db_type()) -> mam_result() | {error, _}.
query_archive(Query, mnesia) -> query_archive(Query, mnesia) ->
{atomic, Result} = mnesia:sync_dirty(fun() -> collect_messages(Query, mnesia) end),
mnesia:transaction(fun() -> collect_messages(Query, mnesia) end),
Result.
-spec read_meta(mam_jid(), db_type()) -> mam_meta(). -spec read_meta(mam_jid(), db_type()) -> mam_meta().
@ -1001,7 +999,7 @@ collect_messages(#mam_query{mam_jid = {U, S},
filtered -> filtered ->
collect_next(Query, QueryState, Meta, N, DBType); collect_next(Query, QueryState, Meta, N, DBType);
not_found -> not_found ->
?ERROR_MSG("MAM message ~B of ~s@~s not found", [ID, U, S]), ?DEBUG("MAM message ~B of ~s@~s not found", [ID, U, S]),
collect_next(Query, QueryState, Meta, N - 1, DBType) collect_next(Query, QueryState, Meta, N - 1, DBType)
end. end.
@ -1024,7 +1022,7 @@ collect_next(#mam_query{direction = aft} = Query,
read_message(Key, Filter, mnesia) -> read_message(Key, Filter, mnesia) ->
ReadMsg = fun() -> mnesia:read(mam_msg, Key) end, ReadMsg = fun() -> mnesia:read(mam_msg, Key) end,
case mnesia:activity(transaction, ReadMsg, [], mnesia_frag) of case mnesia:activity(sync_dirty, ReadMsg, [], mnesia_frag) of
[#mam_msg{} = Msg] -> [#mam_msg{} = Msg] ->
case filter_message(Msg, Filter) of case filter_message(Msg, Filter) of
pass -> pass ->