summaryrefslogtreecommitdiff
path: root/src/mod_offline_sql.erl
diff options
context:
space:
mode:
authorPaweł Chmielowski <pawel@process-one.net>2022-04-08 17:41:17 +0200
committerPaweł Chmielowski <pawel@process-one.net>2022-04-08 17:48:53 +0200
commit0870f32c5939cb17a7c955244161515989b18402 (patch)
tree8e57bffb9dce0a234eabf0aba56cb73d0b88f477 /src/mod_offline_sql.erl
parentAdd rate limited delete_old_mam_messages command (diff)
Add rate limited delete_old_messages
Diffstat (limited to '')
-rw-r--r--src/mod_offline_sql.erl27
1 files changed, 26 insertions, 1 deletions
diff --git a/src/mod_offline_sql.erl b/src/mod_offline_sql.erl
index 65465dff..07978bef 100644
--- a/src/mod_offline_sql.erl
+++ b/src/mod_offline_sql.erl
@@ -30,7 +30,7 @@
-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]).
+ remove_all_messages/2, count_messages/2, import/1, export/1, remove_old_messages_batch/3]).
-include_lib("xmpp/include/xmpp.hrl").
-include("mod_offline.hrl").
@@ -112,6 +112,31 @@ remove_old_messages(Days, LServer) ->
end,
{atomic, ok}.
+remove_old_messages_batch(LServer, Days, Batch) ->
+ case ejabberd_sql:sql_query(
+ LServer,
+ fun(pgsql, _) ->
+ ejabberd_sql:sql_query_t(
+ ?SQL("DELETE FROM spool"
+ " WHERE created_at <"
+ " NOW() - %(Days)d * INTERVAL '1 DAY' LIMIT %(Batch)d"));
+ (sqlite, _) ->
+ ejabberd_sql:sql_query_t(
+ ?SQL("DELETE FROM spool"
+ " WHERE created_at <"
+ " DATETIME('now', '-%(Days)d days') LIMIT %(Batch)d"));
+ (_, _) ->
+ ejabberd_sql:sql_query_t(
+ ?SQL("DELETE FROM spool"
+ " WHERE created_at < NOW() - INTERVAL %(Days)d DAY LIMIT %(Batch)d"))
+ end)
+ of
+ {updated, N} ->
+ {ok, N};
+ Error ->
+ {error, Error}
+ end.
+
remove_user(LUser, LServer) ->
ejabberd_sql:sql_query(
LServer,