Software /
code /
prosody
Comparison
plugins/mod_storage_memory.lua @ 9887:69f810014853
mod_storage_memory: Add support for archive item limits
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Wed, 20 Mar 2019 12:14:45 +0100 |
parent | 9882:18f025b3987d |
child | 9905:6d50efaee148 |
comparison
equal
deleted
inserted
replaced
9886:710a116341cd | 9887:69f810014853 |
---|---|
6 local new_id = require "util.id".medium; | 6 local new_id = require "util.id".medium; |
7 | 7 |
8 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false); | 8 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false); |
9 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {}); | 9 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {}); |
10 | 10 |
11 local archive_item_limit = module:get_option_number("storage_archive_item_limit", 1000); | |
12 | |
11 local memory = setmetatable({}, { | 13 local memory = setmetatable({}, { |
12 __index = function(t, k) | 14 __index = function(t, k) |
13 local store = module:shared(k) | 15 local store = module:shared(k) |
14 t[k] = store; | 16 t[k] = store; |
15 return store; | 17 return store; |
48 | 50 |
49 local archive_store = {}; | 51 local archive_store = {}; |
50 archive_store.__index = archive_store; | 52 archive_store.__index = archive_store; |
51 | 53 |
52 archive_store.users = _users; | 54 archive_store.users = _users; |
55 | |
56 archive_store.caps = { | |
57 total = true; | |
58 quota = archive_item_limit; | |
59 truncate = true; | |
60 }; | |
53 | 61 |
54 function archive_store:append(username, key, value, when, with) | 62 function archive_store:append(username, key, value, when, with) |
55 if is_stanza(value) then | 63 if is_stanza(value) then |
56 value = st.preserialize(value); | 64 value = st.preserialize(value); |
57 value = envload("return xml"..serialize(value), "=(stanza)", { xml = st.deserialize }) | 65 value = envload("return xml"..serialize(value), "=(stanza)", { xml = st.deserialize }) |
68 key = new_id(); | 76 key = new_id(); |
69 v.key = key; | 77 v.key = key; |
70 end | 78 end |
71 if a[key] then | 79 if a[key] then |
72 table.remove(a, a[key]); | 80 table.remove(a, a[key]); |
81 elseif #a >= archive_item_limit then | |
82 return nil, "quota-limit"; | |
73 end | 83 end |
74 local i = #a+1; | 84 local i = #a+1; |
75 a[i] = v; | 85 a[i] = v; |
76 a[key] = i; | 86 a[key] = i; |
77 return key; | 87 return key; |