aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2020-05-05 22:21:39 +0200
committerKim Alvefur <zash@zash.se>2020-05-05 22:21:39 +0200
commitd146cc6f582196d9d9a79b6d3c2bf030cc26f7b2 (patch)
tree11602e606c0142e3e21d1e665b21d60b824873a4 /plugins
parent8055c8f7d721ba1d8aa538255e61a1830377c49e (diff)
downloadprosody-d146cc6f582196d9d9a79b6d3c2bf030cc26f7b2.tar.gz
prosody-d146cc6f582196d9d9a79b6d3c2bf030cc26f7b2.zip
MAM: Remove 1% of contents when reaching limits, fix #1545
With mod\_storage\_internal this counts out to 100 messages out of 10 000, meaning should not hit the quota limit immediately until that many messages have been added again.
Diffstat (limited to 'plugins')
-rw-r--r--plugins/mod_mam/mod_mam.lua4
-rw-r--r--plugins/mod_muc_mam.lua3
2 files changed, 5 insertions, 2 deletions
diff --git a/plugins/mod_mam/mod_mam.lua b/plugins/mod_mam/mod_mam.lua
index 72b7639a..8695fe65 100644
--- a/plugins/mod_mam/mod_mam.lua
+++ b/plugins/mod_mam/mod_mam.lua
@@ -44,6 +44,8 @@ local archive = module:open_store(archive_store, "archive");
local cleanup_after = module:get_option_string("archive_expires_after", "1w");
local cleanup_interval = module:get_option_number("archive_cleanup_interval", 4 * 60 * 60);
local archive_item_limit = module:get_option_number("storage_archive_item_limit", archive.caps and archive.caps.quota or 1000);
+local archive_truncate = math.floor(archive_item_limit * 0.99);
+
if not archive.find then
error("mod_"..(archive._provided_by or archive.name and "storage_"..archive.name).." does not support archiving\n"
.."See https://prosody.im/doc/storage and https://prosody.im/doc/archiving for more information");
@@ -379,7 +381,7 @@ local function message_handler(event, c2s)
if not ok and (archive.caps and archive.caps.truncate) then
module:log("debug", "User '%s' over quota, truncating archive", store_user);
local truncated = archive:delete(store_user, {
- truncate = archive_item_limit - 1;
+ truncate = archive_truncate;
});
if truncated then
ok, err = archive:append(store_user, nil, clone_for_storage, time, with);
diff --git a/plugins/mod_muc_mam.lua b/plugins/mod_muc_mam.lua
index 7eeada6d..a151931f 100644
--- a/plugins/mod_muc_mam.lua
+++ b/plugins/mod_muc_mam.lua
@@ -54,6 +54,7 @@ local archive_store = "muc_log";
local archive = module:open_store(archive_store, "archive");
local archive_item_limit = module:get_option_number("storage_archive_item_limit", archive.caps and archive.caps.quota or 1000);
+local archive_truncate = math.floor(archive_item_limit * 0.99);
if archive.name == "null" or not archive.find then
if not archive.find then
@@ -397,7 +398,7 @@ local function save_to_history(self, stanza)
if not id and (archive.caps and archive.caps.truncate) then
module:log("debug", "User '%s' over quota, truncating archive", room_node);
local truncated = archive:delete(room_node, {
- truncate = archive_item_limit - 1;
+ truncate = archive_truncate;
});
if truncated then
id, err = archive:append(room_node, nil, stored_stanza, time, with);