3 const retry
= require('async/retry')
5 const db
= require('../initializers/database')
6 const logger
= require('./logger')
9 retryTransactionWrapper
,
11 startSerializableTransaction
14 // { arguments, errorMessage }
15 function retryTransactionWrapper (functionToRetry
, options
, finalCallback
) {
16 const args
= options
.arguments
? options
.arguments : []
18 utils
.transactionRetryer(
20 return functionToRetry
.apply(this, args
.concat([ callback
]))
24 logger
.error(options
.errorMessage
, { error: err
})
27 // Do not return the error, continue the process
28 return finalCallback(null)
33 function transactionRetryer (func
, callback
) {
37 errorFilter: function (err
) {
38 const willRetry
= (err
.name
=== 'SequelizeDatabaseError')
39 logger
.debug('Maybe retrying the transaction function.', { willRetry
})
45 function startSerializableTransaction (callback
) {
47 db
.sequelize
.transaction({ isolationLevel: 'SERIALIZABLE' }).asCallback(function (err
, t
) {
48 // We force to return only two parameters
49 return callback(err
, t
)
53 // ---------------------------------------------------------------------------
55 module
.exports
= utils