Software /
code /
prosody
Comparison
util/sql.lua @ 8288:e9ac2d93de18
util.sql: Don't log at error level if a transaction failed and was retried ok
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 04 Oct 2017 10:16:42 +0100 |
parent | 8186:becb593ed86d |
child | 8378:6a098961bc00 |
comparison
equal
deleted
inserted
replaced
8287:66ab0d1b7303 | 8288:e9ac2d93de18 |
---|---|
215 engine.delete = engine.execute_update; | 215 engine.delete = engine.execute_update; |
216 engine.update = engine.execute_update; | 216 engine.update = engine.execute_update; |
217 end | 217 end |
218 end | 218 end |
219 local function handleerr(err) | 219 local function handleerr(err) |
220 log("error", "Error in SQL transaction: %s", debug_traceback(err, 3)); | 220 local trace = debug_traceback(err, 3); |
221 return err; | 221 log("debug", "Error in SQL transaction: %s", trace); |
222 return { err = err, traceback = trace }; | |
222 end | 223 end |
223 function engine:_transaction(func, ...) | 224 function engine:_transaction(func, ...) |
224 if not self.conn then | 225 if not self.conn then |
225 local ok, err = self:connect(); | 226 local ok, err = self:connect(); |
226 if not ok then return ok, err; end | 227 if not ok then return ok, err; end |
236 log("debug", "SQL transaction success [%s]", tostring(func)); | 237 log("debug", "SQL transaction success [%s]", tostring(func)); |
237 local ok, err = self.conn:commit(); | 238 local ok, err = self.conn:commit(); |
238 if not ok then return ok, err; end -- commit failed | 239 if not ok then return ok, err; end -- commit failed |
239 return success, a, b, c; | 240 return success, a, b, c; |
240 else | 241 else |
241 log("debug", "SQL transaction failure [%s]: %s", tostring(func), a); | 242 log("debug", "SQL transaction failure [%s]: %s", tostring(func), a.err); |
242 if self.conn then self.conn:rollback(); end | 243 if self.conn then self.conn:rollback(); end |
243 return success, a; | 244 return success, a.err; |
244 end | 245 end |
245 end | 246 end |
246 function engine:transaction(...) | 247 function engine:transaction(...) |
247 local ok, ret = self:_transaction(...); | 248 local ok, ret = self:_transaction(...); |
248 if not ok then | 249 if not ok then |
249 local conn = self.conn; | 250 local conn = self.conn; |
250 if not conn or not conn:ping() then | 251 if not conn or not conn:ping() then |
252 log("debug", "Database connection was closed. Will reconnect and retry."); | |
251 self.conn = nil; | 253 self.conn = nil; |
254 log("debug", "Retrying SQL transaction [%s]", tostring((...))); | |
252 ok, ret = self:_transaction(...); | 255 ok, ret = self:_transaction(...); |
256 log("debug", "SQL transaction retry %s", ok and "succeeded" or "failed"); | |
257 else | |
258 log("debug", "SQL connection is up, so not retrying"); | |
259 end | |
260 if not ok then | |
261 log("error", "Error in SQL transaction: %s", ret); | |
253 end | 262 end |
254 end | 263 end |
255 return ok, ret; | 264 return ok, ret; |
256 end | 265 end |
257 function engine:_create_index(index) | 266 function engine:_create_index(index) |