diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-21 23:21:13 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2017-05-21 23:21:13 +0300 |
commit | d88e4d495ffc2ae950f77e440aa7c5d06c864309 (patch) | |
tree | 6e032ad05ee9f78e164bb73219cc9d2d8b628f96 /src/mod_offline_mnesia.erl | |
parent | Improve mod_metrics (diff) |
Don't store messages via a single process
Diffstat (limited to 'src/mod_offline_mnesia.erl')
-rw-r--r-- | src/mod_offline_mnesia.erl | 27 |
1 files changed, 4 insertions, 23 deletions
diff --git a/src/mod_offline_mnesia.erl b/src/mod_offline_mnesia.erl index d0d0de418..a725ab003 100644 --- a/src/mod_offline_mnesia.erl +++ b/src/mod_offline_mnesia.erl @@ -26,7 +26,7 @@ -behaviour(mod_offline). --export([init/2, store_messages/5, pop_messages/2, remove_expired_messages/1, +-export([init/2, store_message/1, pop_messages/2, remove_expired_messages/1, remove_old_messages/2, remove_user/2, read_message_headers/2, read_message/3, remove_message/3, read_all_messages/2, remove_all_messages/2, count_messages/2, import/1]). @@ -36,8 +36,6 @@ -include("mod_offline.hrl"). -include("logger.hrl"). --define(OFFLINE_TABLE_LOCK_THRESHOLD, 1000). - %%%=================================================================== %%% API %%%=================================================================== @@ -46,26 +44,9 @@ init(_Host, _Opts) -> [{disc_only_copies, [node()]}, {type, bag}, {attributes, record_info(fields, offline_msg)}]). -store_messages(_Host, US, Msgs, Len, MaxOfflineMsgs) -> - F = fun () -> - Count = if MaxOfflineMsgs =/= infinity -> - Len + count_mnesia_records(US); - true -> 0 - end, - if Count > MaxOfflineMsgs -> discard; - true -> - if Len >= (?OFFLINE_TABLE_LOCK_THRESHOLD) -> - mnesia:write_lock_table(offline_msg); - true -> ok - end, - lists:foreach( - fun(#offline_msg{packet = Pkt} = M) -> - El = xmpp:encode(Pkt), - mnesia:write(M#offline_msg{packet = El}) - end, Msgs) - end - end, - mnesia:transaction(F). +store_message(#offline_msg{packet = Pkt} = OffMsg) -> + El = xmpp:encode(Pkt), + mnesia:dirty_write(OffMsg#offline_msg{packet = El}). pop_messages(LUser, LServer) -> US = {LUser, LServer}, |