Mercurial > prosody-modules
comparison mod_storage_lmdb/mod_storage_lmdb.lua @ 1983:f7fc5088b340
mod_storage_lmdb: Allow passing a transaction flag so we can run get operations in a read-only transaction
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 19 Dec 2015 00:34:55 +0100 |
parents | bb0b2eae5563 |
children | 2ed6f6eeeaba |
comparison
equal
deleted
inserted
replaced
1982:bb0b2eae5563 | 1983:f7fc5088b340 |
---|---|
18 local path = require"util.paths"; | 18 local path = require"util.paths"; |
19 local serialization = require"util.serialization"; | 19 local serialization = require"util.serialization"; |
20 local serialize = serialization.serialize; | 20 local serialize = serialization.serialize; |
21 local deserialize = serialization.deserialize; | 21 local deserialize = serialization.deserialize; |
22 | 22 |
23 local function transaction(env, func, ...) | 23 local function transaction(env, flag, func, ...) |
24 local args, n_args = {...}, select("#", ...); | 24 local args, n_args = {...}, select("#", ...); |
25 local t = env:txn_begin(nil, 0); | 25 local t = env:txn_begin(nil, flag); |
26 local function f() return func(t, unpack(args, 1, n_args)); end | 26 local function f() return func(t, unpack(args, 1, n_args)); end |
27 local success, a, b, c = xpcall(f, traceback); | 27 local success, a, b, c = xpcall(f, traceback); |
28 if not success then | 28 if not success then |
29 io.stderr:write(a, "\n\n"); | 29 io.stderr:write(a, "\n\n"); |
30 t:abort(); | 30 t:abort(); |
64 value = nil; | 64 value = nil; |
65 end | 65 end |
66 if value ~= nil then | 66 if value ~= nil then |
67 value = serialize(value); | 67 value = serialize(value); |
68 end | 68 end |
69 return transaction(self.env, keyvalue_set, self.db, key, value); | 69 return transaction(self.env, 0, keyvalue_set, self.db, key, value); |
70 end | 70 end |
71 | 71 |
72 function keyval:get(key) | 72 function keyval:get(key) |
73 local ok, data = transaction(self.env, keyvalue_get, self.db, key); | 73 local ok, data = transaction(self.env, lmdb.MDB_RDONLY, keyvalue_get, self.db, key); |
74 if not ok then return ok, data; end | 74 if not ok then return ok, data; end |
75 return deserialize(data); | 75 return deserialize(data); |
76 end | 76 end |
77 | 77 |
78 function provider:init(config) | 78 function provider:init(config) |