Mercurial > prosody-modules
annotate mod_storage_appendmap/mod_storage_appendmap.lua @ 5696:66986f5271c3
mod_storage_s3: Skip archive items matching on date but not full datetime
Since it only encodes dates in paths, it would have returned items from
outside the specified start..end range if they were from earlier or
later in the same (UTC) day.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 11 Nov 2023 22:26:39 +0100 |
parents | 78f766372e2c |
children |
rev | line source |
---|---|
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
1 local dump = require "util.serialization".serialize; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
2 local load = require "util.envload".envloadfile; |
5691
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
3 local datetime = require "util.datetime".datetime; |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
4 local dm = require "core.storagemanager".olddm; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
5 |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
6 local REMOVE = {}; -- Special value for removing keys |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
7 |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
8 local driver = {}; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
9 |
5691
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
10 local timestamps = module:get_option_boolean("appendmap_timestamps", true); |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
11 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
12 local keywords = { |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
13 ["do"] = true; ["and"] = true; ["else"] = true; ["break"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
14 ["if"] = true; ["end"] = true; ["goto"] = true; ["false"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
15 ["in"] = true; ["for"] = true; ["then"] = true; ["local"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
16 ["or"] = true; ["nil"] = true; ["true"] = true; ["until"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
17 ["elseif"] = true; ["function"] = true; ["not"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
18 ["repeat"] = true; ["return"] = true; ["while"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
19 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
20 -- _ENV is not technically a keyword but we need to treat it as such |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
21 ["_ENV"] = true; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
22 }; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
23 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
24 local function is_usable_identifier(s) |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
25 return type(s) == "string" and not keywords[s] and s:find("^[%a_][%w_]*$"); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
26 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
27 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
28 local function serialize_key(key) |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
29 if is_usable_identifier(key) then |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
30 return key; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
31 else |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
32 return "_ENV[" .. dump(key) .. "]"; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
33 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
34 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
35 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
36 local function serialize_value(value) |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
37 if value == REMOVE then |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
38 return "nil"; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
39 else |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
40 return dump(value); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
41 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
42 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
43 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
44 local function serialize_pair(key, value) |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
45 key = serialize_key(key); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
46 value = serialize_value(value); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
47 return key .. " = " .. value .. ";\n"; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
48 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
49 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
50 local function serialize_map(keyvalues) |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
51 local keys, values = {}, {}; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
52 for key, value in pairs(keyvalues) do |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
53 key = serialize_key(key); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
54 value = serialize_value(value); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
55 table.insert(keys, key); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
56 table.insert(values, value); |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
57 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
58 return table.concat(keys, ", ") .. " = " .. table.concat(values, ", ") .. ";\n"; |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
59 end |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
60 |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
61 local map = { remove = REMOVE }; |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
62 local map_mt = { __index = map }; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
63 |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
64 function map:get(user, key) |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
65 module:log("debug", "map:get(%s, %s)", tostring(user), tostring(key)) |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
66 local filename = dm.getpath(user, module.host, self.store, "map"); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
67 module:log("debug", "File is %s", filename); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
68 local env = {}; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
69 if _VERSION == "Lua 5.1" then -- HACK |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
70 env._ENV = env; -- HACK |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
71 end -- SO MANY HACKS |
2635
4548c3d685b4
mod_storage_appendmap: Successfully return nothing on ENOENT
Kim Alvefur <zash@zash.se>
parents:
2431
diff
changeset
|
72 local chunk, err, errno = load(filename, env); |
4548c3d685b4
mod_storage_appendmap: Successfully return nothing on ENOENT
Kim Alvefur <zash@zash.se>
parents:
2431
diff
changeset
|
73 if not chunk then if errno == 2 then return end return chunk, err; end |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
74 local ok, err = pcall(chunk); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
75 if not ok then return ok, err; end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
76 if _VERSION == "Lua 5.1" then -- HACK |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
77 env._ENV = nil; -- HACK |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
78 end -- HACKS EVERYWHERE |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
79 if key == nil then |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
80 return env; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
81 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
82 return env[key]; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
83 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
84 |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
85 function map:set_keys(user, keyvalues) |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
86 local data = serialize_map(keyvalues); |
5691
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
87 if timestamps then |
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
88 data = "-- " .. datetime() .. "\n" .. data; |
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
89 end |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
90 return dm.append_raw(user, module.host, self.store, "map", data); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
91 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
92 |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
93 function map:set(user, key, value) |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
94 if _VERSION == "Lua 5.1" then |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
95 assert(key ~= "_ENV", "'_ENV' is a restricted key"); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
96 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
97 if key == nil then |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
98 local filename = dm.getpath(user, module.host, self.store, "map"); |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
99 return os.remove(filename); |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
100 end |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
101 local data = serialize_pair(key, value); |
5691
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
102 if timestamps then |
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
103 data = "-- " .. datetime() .. "\n" .. data; |
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
104 end |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
105 return dm.append_raw(user, module.host, self.store, "map", data); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
106 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
107 |
5690
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
108 function map:items() |
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
109 return dm.users(module.host, self.store, "map"); |
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
110 end |
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
111 |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
112 local keyval = { remove = REMOVE }; |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
113 local keyval_mt = { __index = keyval }; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
114 |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
115 function keyval:get(user) |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
116 return map.get(self, user, nil); |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
117 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
118 |
2796
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
119 function keyval:set(user, keyvalues) |
6a7b7cb7148e
mod_storage_appendmap: Factor out serialization into reusable functions
Kim Alvefur <zash@zash.se>
parents:
2635
diff
changeset
|
120 local data = serialize_map(keyvalues); |
5691
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
121 if timestamps then |
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
122 data = "-- " .. datetime() .. "\n" .. data; |
78f766372e2c
mod_storage_appendmap: Include timestamps when appending data
Kim Alvefur <zash@zash.se>
parents:
5690
diff
changeset
|
123 end |
5061
e44b868cc575
mod_storage_appendmap: Fix keyvalue writes
Kim Alvefur <zash@zash.se>
parents:
2796
diff
changeset
|
124 return dm.store_raw(dm.getpath(user, module.host, self.store, "map"), data); |
2062
8f7083b980cf
mod_storage_appendmap: Fix keyvalue:set()
Kim Alvefur <zash@zash.se>
parents:
2061
diff
changeset
|
125 end |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
126 |
5690
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
127 function keyval:users() |
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
128 return dm.users(module.host, self.store, "map"); |
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
129 end |
ea6c18ec0669
mod_storage_appendmap: Implement item/user iteration methods
Kim Alvefur <zash@zash.se>
parents:
5061
diff
changeset
|
130 |
2061
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
131 -- TODO some kind of periodic compaction thing? |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
132 function map:_compact(user) |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
133 local data = self:get(user); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
134 return keyval.set(self, user, data); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
135 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
136 |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
137 function driver:open(store, typ) |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
138 if typ == "map" then |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
139 return setmetatable({ store = store, }, map_mt); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
140 elseif typ == nil or typ == "keyval" then |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
141 return setmetatable({ store = store, }, keyval_mt); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
142 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
143 return nil, "unsupported-store"; |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
144 end |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
145 |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
146 module:provides("storage", driver); |
b84284144e21
mod_storage_appendmap: Experimental storage module optimized for map stores
Kim Alvefur <zash@zash.se>
parents:
diff
changeset
|
147 |