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_sql.erl | |
parent | Improve mod_metrics (diff) |
Don't store messages via a single process
Diffstat (limited to 'src/mod_offline_sql.erl')
-rw-r--r-- | src/mod_offline_sql.erl | 41 |
1 files changed, 16 insertions, 25 deletions
diff --git a/src/mod_offline_sql.erl b/src/mod_offline_sql.erl index a8c587679..48b32be81 100644 --- a/src/mod_offline_sql.erl +++ b/src/mod_offline_sql.erl @@ -28,7 +28,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, export/1]). @@ -44,30 +44,21 @@ init(_Host, _Opts) -> ok. -store_messages(Host, {User, _Server}, Msgs, Len, MaxOfflineMsgs) -> - Count = if MaxOfflineMsgs =/= infinity -> - Len + count_messages(User, Host); - true -> 0 - end, - if Count > MaxOfflineMsgs -> {atomic, discard}; - true -> - Query = lists:map( - fun(M) -> - LUser = (M#offline_msg.to)#jid.luser, - From = M#offline_msg.from, - To = M#offline_msg.to, - Packet = xmpp:set_from_to( - M#offline_msg.packet, From, To), - NewPacket = xmpp_util:add_delay_info( - Packet, jid:make(Host), - M#offline_msg.timestamp, - <<"Offline Storage">>), - XML = fxml:element_to_binary( - xmpp:encode(NewPacket)), - sql_queries:add_spool_sql(LUser, XML) - end, - Msgs), - sql_queries:add_spool(Host, Query) +store_message(#offline_msg{us = {LUser, LServer}} = M) -> + From = M#offline_msg.from, + To = M#offline_msg.to, + Packet = xmpp:set_from_to(M#offline_msg.packet, From, To), + NewPacket = xmpp_util:add_delay_info( + Packet, jid:make(LServer), + M#offline_msg.timestamp, + <<"Offline Storage">>), + XML = fxml:element_to_binary( + xmpp:encode(NewPacket)), + case sql_queries:add_spool(LUser, LServer, XML) of + {updated, _} -> + ok; + _ -> + {error, db_failure} end. pop_messages(LUser, LServer) -> |