aboutsummaryrefslogtreecommitdiffstats
path: root/util/sql.lua
diff options
context:
space:
mode:
authorKim Alvefur <zash@zash.se>2017-10-04 12:10:55 +0200
committerKim Alvefur <zash@zash.se>2017-10-04 12:10:55 +0200
commit2b7c24b6417aa509fb4f8360d503a24ad6cf5b46 (patch)
tree31071c1b069ed0de0094100b6522683ff05d0e54 /util/sql.lua
parentca622317f100d67023e2088179011eb61a243a2d (diff)
parent14d77f86bb64c5d535e5ac92f3b237eefcbd7a98 (diff)
downloadprosody-2b7c24b6417aa509fb4f8360d503a24ad6cf5b46.tar.gz
prosody-2b7c24b6417aa509fb4f8360d503a24ad6cf5b46.zip
Merge 0.10->trunk
Diffstat (limited to 'util/sql.lua')
-rw-r--r--util/sql.lua17
1 files changed, 13 insertions, 4 deletions
diff --git a/util/sql.lua b/util/sql.lua
index 61d6af41..71158d4c 100644
--- a/util/sql.lua
+++ b/util/sql.lua
@@ -217,8 +217,9 @@ function engine:debug(enable)
end
end
local function handleerr(err)
- log("error", "Error in SQL transaction: %s", debug_traceback(err, 3));
- return err;
+ local trace = debug_traceback(err, 3);
+ log("debug", "Error in SQL transaction: %s", trace);
+ return { err = err, traceback = trace };
end
function engine:_transaction(func, ...)
if not self.conn then
@@ -238,9 +239,9 @@ function engine:_transaction(func, ...)
if not ok then return ok, err; end -- commit failed
return success, a, b, c;
else
- log("debug", "SQL transaction failure [%s]: %s", tostring(func), a);
+ log("debug", "SQL transaction failure [%s]: %s", tostring(func), a.err);
if self.conn then self.conn:rollback(); end
- return success, a;
+ return success, a.err;
end
end
function engine:transaction(...)
@@ -248,8 +249,16 @@ function engine:transaction(...)
if not ok then
local conn = self.conn;
if not conn or not conn:ping() then
+ log("debug", "Database connection was closed. Will reconnect and retry.");
self.conn = nil;
+ log("debug", "Retrying SQL transaction [%s]", tostring((...)));
ok, ret = self:_transaction(...);
+ log("debug", "SQL transaction retry %s", ok and "succeeded" or "failed");
+ else
+ log("debug", "SQL connection is up, so not retrying");
+ end
+ if not ok then
+ log("error", "Error in SQL transaction: %s", ret);
end
end
return ok, ret;