Annotate

mod_storage_memory/mod_storage_memory.lua @ 4559:33b1b6ff23d8

mod_measure_stanza_counts: port to new metrics API See https://prosody.im/doc/developers/core/statsmanager#metric
author Jonas Schäfer <jonas@wielicki.name>
date Thu, 20 May 2021 15:25:07 +0200
parent 3361:bc745a60ce21
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
1 local serialize = require "util.serialization".serialize;
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
2 local envload = require "util.envload".envload;
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
3 local st = require "util.stanza";
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
4 local is_stanza = st.is_stanza or function (s) return getmetatable(s) == st.stanza_mt end
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
5
2620
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
6 local auto_purge_enabled = module:get_option_boolean("storage_memory_temporary", false);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
7 local auto_purge_stores = module:get_option_set("storage_memory_temporary_stores", {});
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 local memory = setmetatable({}, {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 __index = function(t, k)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 local store = module:shared(k)
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12 t[k] = store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 return store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 });
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
17 local function NULL() return nil end
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
18
2619
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
19 local function _purge_store(self, username)
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
20 self.store[username or NULL] = nil;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
21 return true;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
22 end
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
23
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 local keyval_store = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 keyval_store.__index = keyval_store;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27 function keyval_store:get(username)
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
28 return (self.store[username or NULL] or NULL)();
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 function keyval_store:set(username, data)
3091
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
32 if data ~= nil then
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
33 data = envload("return "..serialize(data), "@data", {});
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
34 end
8e5da12205b5 mod_storage_memory: Fix removal of data in keyvalue (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2803
diff changeset
35 self.store[username or NULL] = data;
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 return true;
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38
2619
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
39 keyval_store.purge = _purge_store;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
40
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
41 local archive_store = {};
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
42 archive_store.__index = archive_store;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
43
1753
54c8a0cb2996 mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents: 1608
diff changeset
44 function archive_store:append(username, key, value, when, with)
54c8a0cb2996 mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents: 1608
diff changeset
45 if type(when) ~= "number" then
1760
e72f9eac51c8 mod_storage_(various): Order swapping in 54c8a0cb2996 was backwards
Kim Alvefur <zash@zash.se>
parents: 1753
diff changeset
46 when, with, value = value, when, with;
1753
54c8a0cb2996 mod_storage_(archive-capable): Change order of arguments to :append to be the same as return values from :find iterator (see prosody 41725f3df3cc)
Kim Alvefur <zash@zash.se>
parents: 1608
diff changeset
47 end
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
48 if is_stanza(value) then
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
49 value = st.preserialize(value);
2802
0d5d1ff96600 mod_storage_memory: Serialize stanzas on save (was delayed until query)
Kim Alvefur <zash@zash.se>
parents: 2673
diff changeset
50 value = envload("return xml"..serialize(value), "@stanza", { xml = st.deserialize })
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
51 else
2673
2e1a4740adee mod_storage_memory: Include missing return statement (thanks jonasw)
Kim Alvefur <zash@zash.se>
parents: 2661
diff changeset
52 value = envload("return "..serialize(value), "@data", {});
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
53 end
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
54 local a = self.store[username or NULL];
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
55 if not a then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
56 a = {};
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
57 self.store[username or NULL] = a;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
58 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
59 local i = #a+1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
60 local v = { key = key, when = when, with = with, value = value };
2803
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
61 if not key then
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
62 key = tostring(a):match"%x+$"..tostring(v):match"%x+$";
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
63 v.key = key;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
64 end
2803
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
65 if a[key] then
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
66 table.remove(a, a[key]);
9db18f909b84 mod_storage_memory: Allow archive items to be overwritten by id
Kim Alvefur <zash@zash.se>
parents: 2802
diff changeset
67 end
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
68 a[i] = v;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
69 a[key] = i;
2654
9e5015555fff mod_storage_memory: Fix to make archive:append() return the archive id as it should
Kim Alvefur <zash@zash.se>
parents: 2620
diff changeset
70 return key;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
71 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
72
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
73 local function archive_iter (a, start, stop, step, limit, when_start, when_end, match_with)
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
74 local item, when, with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
75 local count = 0;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
76 coroutine.yield(true); -- Ready
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
77 for i = start, stop, step do
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
78 item = a[i];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
79 when, with = item.when, item.with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
80 if when >= when_start and when_end >= when and (not match_with or match_with == with) then
2656
83fb61fa476e mod_storage_memory: Serialize data functions that return the data (prevents mutation of stored data)
Kim Alvefur <zash@zash.se>
parents: 2655
diff changeset
81 coroutine.yield(item.key, item.value(), when, with);
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
82 count = count + 1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
83 if limit and count >= limit then return end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
84 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
85 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
86 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
87
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
88 function archive_store:find(username, query)
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
89 local a = self.store[username or NULL] or {};
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
90 local start, stop, step = 1, #a, 1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
91 local qstart, qend, qwith = -math.huge, math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
92 local limit;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
93 if query then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
94 module:log("debug", "query included")
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
95 if query.reverse then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
96 start, stop, step = stop, start, -1;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
97 if query.before then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
98 start = a[query.before];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
99 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
100 elseif query.after then
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
101 start = a[query.after];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
102 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
103 limit = query.limit;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
104 qstart = query.start or qstart;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
105 qend = query["end"] or qend;
2660
796ace2c8f9d mod_storage_memory: Inclued 'with' in search [luacheck]
Kim Alvefur <zash@zash.se>
parents: 2659
diff changeset
106 qwith = query.with;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
107 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
108 if not start then return nil, "invalid-key"; end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
109 local iter = coroutine.wrap(archive_iter);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
110 iter(a, start, stop, step, limit, qstart, qend, qwith);
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
111 return iter;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
112 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
113
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
114 function archive_store:delete(username, query)
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
115 if not query or next(query) == nil then
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
116 self.store[username or NULL] = nil;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
117 return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
118 end
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
119 local old = self.store[username or NULL];
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
120 if not old then return true; end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
121 local qstart = query.start or -math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
122 local qend = query["end"] or math.huge;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
123 local qwith = query.with;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
124 local new = {};
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
125 self.store[username or NULL] = new;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
126 local t;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
127 for i = 1, #old do
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
128 i = old[i];
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
129 t = i.when;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
130 if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then
3361
bc745a60ce21 mod_storage_memory: Fix saving of remaining items during deletion
Kim Alvefur <zash@zash.se>
parents: 3091
diff changeset
131 self:append(username, i.key, i.value(), t, i.with);
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
132 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
133 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
134 if #new == 0 then
2097
4454f124465a mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents: 1760
diff changeset
135 self.store[username or NULL] = nil;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
136 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
137 return true;
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
138 end
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
139
2619
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
140 archive_store.purge = _purge_store;
1e4bbff0a6fd mod_storage_memory: Add :purge() method to all store types
Matthew Wild <mwild1@gmail.com>
parents: 2172
diff changeset
141
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
142 local stores = {
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
143 keyval = keyval_store;
1608
59fdf4f12343 mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents: 1607
diff changeset
144 archive = archive_store;
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
145 }
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
146
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
147 local driver = {};
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
148
2661
1d734acabd46 mod_storage_memory: Ignore unused 'self' [luacheck]
Kim Alvefur <zash@zash.se>
parents: 2660
diff changeset
149 function driver:open(store, typ) -- luacheck: ignore 212/self
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
150 local store_mt = stores[typ or "keyval"];
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
151 if store_mt then
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
152 return setmetatable({ store = memory[store] }, store_mt);
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
153 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
154 return nil, "unsupported-store";
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
155 end
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
156
2620
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
157 if auto_purge_enabled then
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
158 module:hook("resource-unbind", function (event)
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
159 local user_bare_jid = event.session.username.."@"..event.session.host;
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
160 if not prosody.bare_sessions[user_bare_jid] then -- User went offline
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
161 module:log("debug", "Clearing store for offline user %s", user_bare_jid);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
162 local f, s, v;
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
163 if auto_purge_stores:empty() then
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
164 f, s, v = pairs(memory);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
165 else
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
166 f, s, v = auto_purge_stores:items();
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
167 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
168
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
169 for store_name in f, s, v do
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
170 if memory[store_name] then
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
171 memory[store_name][event.session.username] = nil;
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
172 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
173 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
174 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
175 end);
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
176 end
8b8cab2eb7fc mod_storage_memory: Add support for clearing a user's data when they log out
Matthew Wild <mwild1@gmail.com>
parents: 2619
diff changeset
177
1259
fa7e402fcdc1 mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff changeset
178 module:provides("storage", driver);