diff options
author | Kim Alvefur <zash@zash.se> | 2023-09-24 13:41:54 +0200 |
---|---|---|
committer | Kim Alvefur <zash@zash.se> | 2023-09-24 13:41:54 +0200 |
commit | 069bcf619b5ce62f79f249a43432fa2de2281d1d (patch) | |
tree | 46505dd2284c98f94ea2d4956849e27c41aa347a | |
parent | adfd306e6ec56e709dc1eed522acb36c20c2b19e (diff) | |
download | prosody-069bcf619b5ce62f79f249a43432fa2de2281d1d.tar.gz prosody-069bcf619b5ce62f79f249a43432fa2de2281d1d.zip |
mod_storage_internal: Fix fast trimming of archive with exactly one item
This method would previously never delete the first (and only) item
since it works out which item should become the first item after the
trim operation, which doesn't make sense when all should be removed.
This also works as an optimization for when all the last item should be
trimmed, thus items should be removed.
-rw-r--r-- | plugins/mod_storage_internal.lua | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/plugins/mod_storage_internal.lua b/plugins/mod_storage_internal.lua index 66200977..bde294b2 100644 --- a/plugins/mod_storage_internal.lua +++ b/plugins/mod_storage_internal.lua @@ -347,6 +347,13 @@ end function archive:trim(username, to_when) local list, err = datamanager.list_open(username, host, self.store); if not list then return list,err;end + + -- shortcut: check if the last item should be trimmed, if so, drop the whole archive + local last = list[#list].when or datetime.parse(list[#list].attr.stamp); + if last <= to_when then + return datamanager.list_store(username, host, self.store, nil); + end + -- luacheck: ignore 211/exact local i, exact = binary_search(list, function(item) local when = item.when or datetime.parse(item.attr.stamp); |