Fixed a bunch of MySQL pooling issues where connections were not properly released or were double-released

This commit is contained in:
Andris Reinman 2016-04-05 15:29:42 +03:00
parent 06d2712916
commit 0392473ecd
8 changed files with 10 additions and 13 deletions

View file

@ -313,8 +313,8 @@ module.exports.send = (id, callback) => {
// campaigns marked as status=2 should be picked up by the sending processes
connection.query('UPDATE campaigns SET `status`=2, `status_change`=NOW() WHERE id=? LIMIT 1', [id], err => {
if (err) {
connection.release();
if (err) {
return callback(err);
}
return callback(null, true);
@ -453,11 +453,10 @@ module.exports.findMail = (responseId, callback) => {
if (err || !rows || !rows.length) {
return checkNext();
}
connection.release();
let message = rows[0];
message.campaign = campaign.id;
connection.release();
return callback(null, message);
});
};
@ -482,7 +481,6 @@ function createCampaignTables(id, callback) {
connection.query(query, err => {
connection.release();
if (err) {
return callback(err);
}
return callback(null, true);

View file

@ -328,11 +328,11 @@ function addCustomField(listId, name, defaultValue, type, group, visible, callba
}
connection.query(query, err => {
connection.release();
if (err) {
connection.query('DELETE FROM custom_fields WHERE id=? LIMIT 1', [fieldId], () => false);
connection.query('DELETE FROM custom_fields WHERE id=? LIMIT 1', [fieldId], () => connection.release());
return callback(err);
}
connection.release();
return callback(null, fieldId);
});
});

View file

@ -21,7 +21,6 @@ module.exports.list = (start, limit, callback) => {
connection.query('SELECT FOUND_ROWS() AS total', (err, total) => {
connection.release();
if (err) {
connection.release();
return callback(err);
}
return callback(null, rows, total && total[0] && total[0].total);
@ -45,8 +44,8 @@ module.exports.quicklist = callback => {
let lists = (rows || []).map(tools.convertKeys);
connection.query('SELECT id, list, name FROM segments ORDER BY list, name LIMIT 1000', (err, rows) => {
if (err) {
connection.release();
if (err) {
return callback(err);
}
@ -56,7 +55,6 @@ module.exports.quicklist = callback => {
list.segments = segments.filter(segment => segment.list === list.id);
});
connection.release();
return callback(null, lists);
});
});

View file

@ -605,7 +605,6 @@ module.exports.subscribers = (id, onlySubscribed, callback) => {
}
db.getConnection((err, connection) => {
connection.release();
if (err) {
return callback(err);
}
@ -618,6 +617,7 @@ module.exports.subscribers = (id, onlySubscribed, callback) => {
}
connection.query(query, queryData.values, (err, rows) => {
connection.release();
if (err) {
return callback(err);
}

View file

@ -26,7 +26,6 @@ module.exports.list = (listId, start, limit, callback) => {
connection.query('SELECT FOUND_ROWS() AS total', (err, total) => {
connection.release();
if (err) {
connection.release();
return callback(err);
}
@ -105,7 +104,6 @@ module.exports.filter = (listId, request, columns, segmentId, callback) => {
connection.query('SELECT FOUND_ROWS() AS total', (err, filteredTotal) => {
connection.release();
if (err) {
connection.release();
return callback(err);
}

View file

@ -36,7 +36,6 @@ module.exports.quicklist = callback => {
connection.query('SELECT id, name FROM templates ORDER BY name LIMIT 1000', (err, rows) => {
connection.release();
if (err) {
connection.release();
return callback(err);
}
return callback(null, (rows || []).map(tools.convertKeys));

View file

@ -193,6 +193,7 @@ module.exports.sendReset = (username, callback) => {
}
if (!rows.length) {
connection.release();
return callback(null, false);
}

View file

@ -15,6 +15,9 @@
"author": "Andris Reinman",
"license": "GPL-3.0",
"homepage": "http://mailtrain.org",
"engines" : {
"node" : ">=5.0.0"
},
"devDependencies": {
"grunt": "^0.4.5",
"grunt-cli": "^1.1.0",