Software /
code /
prosody-modules
Annotate
mod_storage_memory/mod_storage_memory.lua @ 2491:5fbca7de2088
mod_smacks: Send out more ack requests where needed
Under some circumstances it was possible that more than "max_unacked_stanzas"
where left in the outgoing stanza queue without forcing an ack.
This could happen, when more stanzas entered the queue while the last ack request
was still unanswered.
Now the test "#queue > max_unacked_stanzas" is done upon receiving
an ack as well as when sending out stanzas, which fixes this bug.
author | tmolitor <thilo@eightysoft.de> |
---|---|
date | Sun, 12 Feb 2017 19:27:50 +0100 |
parent | 2172:a347b71adb07 |
child | 2619:1e4bbff0a6fd |
rev | line source |
---|---|
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local memory = setmetatable({}, { |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
3 __index = function(t, k) |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 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
|
5 t[k] = store; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
6 return store; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
7 end |
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 |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
10 local NULL = {}; |
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
11 |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
12 local keyval_store = {}; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
13 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
|
14 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
15 function keyval_store:get(username) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
16 return self.store[username or NULL]; |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
17 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
18 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
19 function keyval_store:set(username, data) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
20 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
|
21 return true; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
22 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
23 |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
24 local map_store = {}; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
25 map_store.__index = map_store; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
26 |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
27 function map_store:get(username, key) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
28 local userstore = self.store[username or NULL]; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
29 if type(userstore) == "table" then |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
30 return userstore[key]; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
31 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
32 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
33 |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
34 function map_store:set(username, key, data) |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
35 local userstore = self.store[username or NULL]; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
36 if userstore == nil then |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
37 userstore = {}; |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
38 self.store[username or NULL] = userstore; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
39 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
40 userstore[key] = data; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
41 return true; |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
42 end |
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
43 |
2171
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
44 map_store.remove = {}; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
45 function map_store:set_keys(username, keydatas) |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
46 local userstore = self.store[username or NULL]; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
47 if userstore == nil then |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
48 userstore = {}; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
49 self.store[username or NULL] = userstore; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
50 end |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
51 for k,v in pairs(keydatas) do |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
52 if v == self.remove then v = nil; end |
2172
a347b71adb07
mod_storage_memory: Fix copypaste error
Kim Alvefur <zash@zash.se>
parents:
2171
diff
changeset
|
53 userstore[k] = v; |
2171
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
54 end |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
55 return true; |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
56 end |
85d88ed4f2a2
mod_storage_memory: Implement 'add_keys' method of map stores (required for rosters in 0.10+)
Kim Alvefur <zash@zash.se>
parents:
2097
diff
changeset
|
57 |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
58 local archive_store = {}; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
59 archive_store.__index = archive_store; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
60 |
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
|
61 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
|
62 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
|
63 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
|
64 end |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
65 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
|
66 if not a then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
67 a = {}; |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
68 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
|
69 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
70 local i = #a+1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
71 local v = { key = key, when = when, with = with, value = value }; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
72 if not key or a[key] then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
73 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
|
74 v.key = key; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
75 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
76 a[i] = v; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
77 a[key] = i; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
78 return true; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
79 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
80 |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
81 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
|
82 local item, when, with; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
83 local count = 0; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
84 coroutine.yield(true); -- Ready |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
85 for i = start, stop, step do |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
86 item = a[i]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
87 when, with = item.when, item.with; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
88 if when >= when_start and when_end >= when and (not match_with or match_with == with) then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
89 coroutine.yield(item.key, item.value, when, with); |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
90 count = count + 1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
91 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
|
92 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
93 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
94 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
95 |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
96 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
|
97 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
|
98 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
|
99 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
|
100 local limit; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
101 if query then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
102 module:log("debug", "query included") |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
103 if query.reverse then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
104 start, stop, step = stop, start, -1; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
105 if query.before then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
106 start = a[query.before]; |
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 elseif query.after then |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
109 start = a[query.after]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
110 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
111 limit = query.limit; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
112 qstart = query.start or qstart; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
113 qend = query["end"] or qend; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
114 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
115 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
|
116 local iter = coroutine.wrap(archive_iter); |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
117 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
|
118 return iter; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
119 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
120 |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
121 function archive_store:delete(username, query) |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
122 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
|
123 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
|
124 return true; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
125 end |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
126 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
|
127 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
|
128 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
|
129 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
|
130 local qwith = query.with; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
131 local new = {}; |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
132 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
|
133 local t; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
134 for i = 1, #old do |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
135 i = old[i]; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
136 t = i.when; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
137 if not(qstart >= t and qend <= t and (not qwith or i.with == qwith)) then |
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
|
138 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
|
139 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
140 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
141 if #new == 0 then |
2097
4454f124465a
mod_storage_memory: Support for empty username stores
Matthew Wild <mwild1@gmail.com>
parents:
1760
diff
changeset
|
142 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
|
143 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
144 return true; |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
145 end |
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
146 |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 local stores = { |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
148 keyval = keyval_store; |
1607
8b997d9cf09e
mod_storage_memory: Add support for map stores
Kim Alvefur <zash@zash.se>
parents:
1259
diff
changeset
|
149 map = map_store; |
1608
59fdf4f12343
mod_storage_memory: Add support for archive stores
Kim Alvefur <zash@zash.se>
parents:
1607
diff
changeset
|
150 archive = archive_store; |
1259
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
151 } |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
152 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
153 local driver = {}; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
154 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
155 function driver:open(store, typ) |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
156 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
|
157 if store_mt then |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
158 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
|
159 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
160 return nil, "unsupported-store"; |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
161 end |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
162 |
fa7e402fcdc1
mod_storage_memory: Simple in-memory only storage backend without persistence
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
163 module:provides("storage", driver); |