Skip to content

Instantly share code, notes, and snippets.

@realyze
Created May 11, 2015 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save realyze/1aef77ca823fad7e89fe to your computer and use it in GitHub Desktop.
Save realyze/1aef77ca823fad7e89fe to your computer and use it in GitHub Desktop.
Sequelize SERIALIZABLE isolation level error
var Sequelize = require('sequelize');
var Promise = require('bluebird');
var sequelize = new Sequelize('postgres://realyze@localhost:5432/trans-test');
var Transaction = sequelize.define('transaction', {
value: {
type: Sequelize.DECIMAL(10, 3),
field: 'value'
}
});
Transaction.sync({force: true}).then(function () {
function transTest(val) {
return sequelize.transaction({isolationLevel: 'SERIALIZABLE'}, function(t) {
return Transaction.sum('value', {transaction: t})
.then(function (balance) {
if (balance < 0) {
console.log('not enough money');
return Promise.reject(new Error())
}
return Transaction.create({value: -val}, {transaction: t});
})
});
}
Transaction.create({value: 100})
.then(function() {
return Promise.all([transTest(80), transTest(80), transTest(80)]);
})
.then(function(res) {
console.log('done');
})
.catch(function(err) {
console.error('TRANSACTION ERROR', err);
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment