Software / code / prosody
Comparison
util/pubsub.lua @ 7696:1c410b4f3a58
util.pubsub: Factor item storage cache into a per service configurable option
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Sun, 16 Oct 2016 00:36:05 +0200 |
| parent | 7695:56ce32cfd6d9 |
| child | 7697:bd854e762875 |
| child | 7703:74e755674e0f |
comparison
equal
deleted
inserted
replaced
| 7695:56ce32cfd6d9 | 7696:1c410b4f3a58 |
|---|---|
| 3 | 3 |
| 4 local service = {}; | 4 local service = {}; |
| 5 local service_mt = { __index = service }; | 5 local service_mt = { __index = service }; |
| 6 | 6 |
| 7 local default_config = { __index = { | 7 local default_config = { __index = { |
| 8 itemstore = function (config) return cache.new(tonumber(config["pubsub#max_items"])) end; | |
| 8 broadcaster = function () end; | 9 broadcaster = function () end; |
| 9 get_affiliation = function () end; | 10 get_affiliation = function () end; |
| 10 capabilities = {}; | 11 capabilities = {}; |
| 11 } }; | 12 } }; |
| 12 local default_node_config = { __index = { | 13 local default_node_config = { __index = { |
| 220 name = node; | 221 name = node; |
| 221 subscribers = {}; | 222 subscribers = {}; |
| 222 config = setmetatable(options or {}, {__index=self.node_defaults}); | 223 config = setmetatable(options or {}, {__index=self.node_defaults}); |
| 223 affiliations = {}; | 224 affiliations = {}; |
| 224 }; | 225 }; |
| 225 self.data[node] = cache.new(self.nodes[node].config["pubsub#max_items"]); | 226 self.data[node] = self.config.itemstore(self.nodes[node].config); |
| 226 self.events.fire_event("node-created", { node = node, actor = actor }); | 227 self.events.fire_event("node-created", { node = node, actor = actor }); |
| 227 local ok, err = self:set_affiliation(node, true, actor, "owner"); | 228 local ok, err = self:set_affiliation(node, true, actor, "owner"); |
| 228 if not ok then | 229 if not ok then |
| 229 self.nodes[node] = nil; | 230 self.nodes[node] = nil; |
| 230 self.data[node] = nil; | 231 self.data[node] = nil; |
| 305 -- | 306 -- |
| 306 local node_obj = self.nodes[node]; | 307 local node_obj = self.nodes[node]; |
| 307 if not node_obj then | 308 if not node_obj then |
| 308 return false, "item-not-found"; | 309 return false, "item-not-found"; |
| 309 end | 310 end |
| 310 self.data[node] = cache.new(node_obj.config["pubsub#max_items"]); -- Purge | 311 self.data[node] = self.config.itemstore(self.nodes[node].config); |
| 311 self.events.fire_event("node-purged", { node = node, actor = actor }); | 312 self.events.fire_event("node-purged", { node = node, actor = actor }); |
| 312 if notify then | 313 if notify then |
| 313 self.config.broadcaster("purge", node, node_obj.subscribers); | 314 self.config.broadcaster("purge", node, node_obj.subscribers); |
| 314 end | 315 end |
| 315 return true | 316 return true |
| 420 end | 421 end |
| 421 | 422 |
| 422 for k,v in pairs(new_config) do | 423 for k,v in pairs(new_config) do |
| 423 node_obj.config[k] = v; | 424 node_obj.config[k] = v; |
| 424 end | 425 end |
| 425 local new_data = cache.new(node_obj.config["pubsub#max_items"]); | 426 local new_data = self.config.itemstore(self.nodes[node].config); |
| 426 for key, value in self.data[node]:items() do | 427 for key, value in self.data[node]:items() do |
| 427 new_data:set(key, value); | 428 new_data:set(key, value); |
| 428 end | 429 end |
| 429 self.data[node] = new_data; | 430 self.data[node] = new_data; |
| 430 return true; | 431 return true; |