From b090b67ec4185e79c83811ee2912b8ed32fce707 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sat, 6 Apr 2013 20:07:08 +0100 Subject: prosodyctl: Define prosody.core_post_stanza as an empty function --- prosodyctl | 1 + 1 file changed, 1 insertion(+) diff --git a/prosodyctl b/prosodyctl index a8cf0e69..71b99f9e 100755 --- a/prosodyctl +++ b/prosodyctl @@ -51,6 +51,7 @@ local prosody = { lock_globals = function () end; unlock_globals = function () end; installed = CFG_SOURCEDIR ~= nil; + core_post_stanza = function () end; -- TODO: mod_router! }; _G.prosody = prosody; -- cgit v1.2.3 From d6c4bffd9b35ee768711e57c986435bdca4d87cf Mon Sep 17 00:00:00 2001 From: Marco Cirillo Date: Sun, 7 Apr 2013 12:23:29 +0000 Subject: net.http.server: add API to allow firing events directly on the server. --- net/http/server.lua | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/http/server.lua b/net/http/server.lua index 20c2da3e..830579c9 100644 --- a/net/http/server.lua +++ b/net/http/server.lua @@ -284,6 +284,9 @@ end function _M.set_default_host(host) default_host = host; end +function _M.fire_event(event, ...) + return events.fire_event(event, ...); +end _M.listener = listener; _M.codes = codes; -- cgit v1.2.3 From 2e7d2a24ce7d5561ccee42fbe327cf73967e00d4 Mon Sep 17 00:00:00 2001 From: Marco Cirillo Date: Sun, 7 Apr 2013 16:56:49 +0000 Subject: util.datamanager: expose path decode and encode functions. --- util/datamanager.lua | 2 ++ 1 file changed, 2 insertions(+) diff --git a/util/datamanager.lua b/util/datamanager.lua index 383e738f..9f29458c 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -354,4 +354,6 @@ function purge(username, host) return #errs == 0, t_concat(errs, ", "); end +_M.path_decode = decode; +_M.path_encode = encode; return _M; -- cgit v1.2.3 From f056043347346a781c3519b5fdb1b5357e3df771 Mon Sep 17 00:00:00 2001 From: Matthew Wild Date: Sun, 7 Apr 2013 20:28:12 +0100 Subject: util.datamanager: Clear the cache of created directories on storage failure, and retry --- util/datamanager.lua | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/util/datamanager.lua b/util/datamanager.lua index 9f29458c..4a4d62b3 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -187,17 +187,25 @@ function store(username, host, datastore, data) -- save the datastore local d = "return " .. serialize(data) .. ";\n"; - local ok, msg = atomic_store(getpath(username, host, datastore, nil, true), d); - if not ok then - log("error", "Unable to write to %s storage ('%s') for user: %s@%s", datastore, msg, username or "nil", host or "nil"); - return nil, "Error saving to storage"; - end - if next(data) == nil then -- try to delete empty datastore - log("debug", "Removing empty %s datastore for user %s@%s", datastore, username or "nil", host or "nil"); - os_remove(getpath(username, host, datastore)); - end - -- we write data even when we are deleting because lua doesn't have a - -- platform independent way of checking for non-exisitng files + local mkdir_cache_cleared; + repeat + local ok, msg = atomic_store(getpath(username, host, datastore, nil, true), d); + if not ok then + if not mkdir_cache_cleared then -- We may need to recreate a removed directory + _mkdir = {}; + mkdir_cache_cleared = true; + else + log("error", "Unable to write to %s storage ('%s') for user: %s@%s", datastore, msg, username or "nil", host or "nil"); + return nil, "Error saving to storage"; + end + end + if next(data) == nil then -- try to delete empty datastore + log("debug", "Removing empty %s datastore for user %s@%s", datastore, username or "nil", host or "nil"); + os_remove(getpath(username, host, datastore)); + end + -- we write data even when we are deleting because lua doesn't have a + -- platform independent way of checking for non-exisitng files + until ok; return true; end -- cgit v1.2.3