aboutsummaryrefslogtreecommitdiff
path: root/src/mod_offline_sql.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-05-21 23:21:13 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-05-21 23:21:13 +0300
commitd88e4d495ffc2ae950f77e440aa7c5d06c864309 (patch)
tree6e032ad05ee9f78e164bb73219cc9d2d8b628f96 /src/mod_offline_sql.erl
parentImprove 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.erl41
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) ->