Mercurial > prosody-hg
comparison core/storagemanager.lua @ 6609:d2faaaca695d
Merge 0.10->trunk
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Fri, 27 Mar 2015 22:24:57 +0000 |
| parents | 8aa967c81cbc |
| children | 42fdc8dddf04 |
comparison
equal
deleted
inserted
replaced
| 6608:b6e558febb7a | 6609:d2faaaca695d |
|---|---|
| 78 driver = null_storage_driver; | 78 driver = null_storage_driver; |
| 79 end | 79 end |
| 80 return driver, driver_name; | 80 return driver, driver_name; |
| 81 end | 81 end |
| 82 | 82 |
| 83 local map_shim_mt = { | |
| 84 __index = { | |
| 85 get = function(self, username, key) | |
| 86 local ret, err = self.keyval_store:get(username); | |
| 87 if ret == nil then return nil, err end | |
| 88 return ret[key]; | |
| 89 end; | |
| 90 set = function(self, username, key, data) | |
| 91 local current, err = self.keyval_store:get(username); | |
| 92 if current == nil then | |
| 93 if err then | |
| 94 return nil, err; | |
| 95 else | |
| 96 current = {}; | |
| 97 end | |
| 98 end | |
| 99 current[key] = data; | |
| 100 return self.keyval_store:set(username, current); | |
| 101 end; | |
| 102 }; | |
| 103 } | |
| 104 local function create_map_shim(host, store) | |
| 105 local keyval_store, err = open(host, store, "keyval"); | |
| 106 if keyval_store == nil then return nil, err end | |
| 107 return setmetatable({ | |
| 108 keyval_store = keyval_store; | |
| 109 }, map_shim_mt); | |
| 110 end | |
| 111 | |
| 83 function open(host, store, typ) | 112 function open(host, store, typ) |
| 84 local driver, driver_name = get_driver(host, store); | 113 local driver, driver_name = get_driver(host, store); |
| 85 local ret, err = driver:open(store, typ); | 114 local ret, err = driver:open(store, typ); |
| 86 if not ret then | 115 if not ret then |
| 87 if err == "unsupported-store" then | 116 if err == "unsupported-store" then |
| 117 if typ == "map" then -- Use shim on top of keyval store | |
| 118 log("debug", "map storage driver unavailable, using shim on top of keyval store."); | |
| 119 return create_map_shim(host, store); | |
| 120 end | |
| 88 log("debug", "Storage driver %s does not support store %s (%s), falling back to null driver", | 121 log("debug", "Storage driver %s does not support store %s (%s), falling back to null driver", |
| 89 driver_name, store, typ or "<nil>"); | 122 driver_name, store, typ or "<nil>"); |
| 90 ret = null_storage_driver; | 123 ret = null_storage_driver; |
| 91 err = nil; | 124 err = nil; |
| 92 end | 125 end |
