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 // 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 => { connection.query('UPDATE campaigns SET `status`=2, `status_change`=NOW() WHERE id=? LIMIT 1', [id], err => {
connection.release();
if (err) { if (err) {
connection.release();
return callback(err); return callback(err);
} }
return callback(null, true); return callback(null, true);
@ -453,11 +453,10 @@ module.exports.findMail = (responseId, callback) => {
if (err || !rows || !rows.length) { if (err || !rows || !rows.length) {
return checkNext(); return checkNext();
} }
connection.release();
let message = rows[0]; let message = rows[0];
message.campaign = campaign.id; message.campaign = campaign.id;
connection.release();
return callback(null, message); return callback(null, message);
}); });
}; };
@ -482,7 +481,6 @@ function createCampaignTables(id, callback) {
connection.query(query, err => { connection.query(query, err => {
connection.release(); connection.release();
if (err) { if (err) {
return callback(err); return callback(err);
} }
return callback(null, true); return callback(null, true);

View file

@ -328,11 +328,11 @@ function addCustomField(listId, name, defaultValue, type, group, visible, callba
} }
connection.query(query, err => { connection.query(query, err => {
connection.release();
if (err) { 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); return callback(err);
} }
connection.release();
return callback(null, fieldId); 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.query('SELECT FOUND_ROWS() AS total', (err, total) => {
connection.release(); connection.release();
if (err) { if (err) {
connection.release();
return callback(err); return callback(err);
} }
return callback(null, rows, total && total[0] && total[0].total); return callback(null, rows, total && total[0] && total[0].total);
@ -45,8 +44,8 @@ module.exports.quicklist = callback => {
let lists = (rows || []).map(tools.convertKeys); let lists = (rows || []).map(tools.convertKeys);
connection.query('SELECT id, list, name FROM segments ORDER BY list, name LIMIT 1000', (err, rows) => { connection.query('SELECT id, list, name FROM segments ORDER BY list, name LIMIT 1000', (err, rows) => {
connection.release();
if (err) { if (err) {
connection.release();
return callback(err); return callback(err);
} }
@ -56,7 +55,6 @@ module.exports.quicklist = callback => {
list.segments = segments.filter(segment => segment.list === list.id); list.segments = segments.filter(segment => segment.list === list.id);
}); });
connection.release();
return callback(null, lists); return callback(null, lists);
}); });
}); });

View file

@ -605,7 +605,6 @@ module.exports.subscribers = (id, onlySubscribed, callback) => {
} }
db.getConnection((err, connection) => { db.getConnection((err, connection) => {
connection.release();
if (err) { if (err) {
return callback(err); return callback(err);
} }
@ -618,6 +617,7 @@ module.exports.subscribers = (id, onlySubscribed, callback) => {
} }
connection.query(query, queryData.values, (err, rows) => { connection.query(query, queryData.values, (err, rows) => {
connection.release();
if (err) { if (err) {
return callback(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.query('SELECT FOUND_ROWS() AS total', (err, total) => {
connection.release(); connection.release();
if (err) { if (err) {
connection.release();
return callback(err); 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.query('SELECT FOUND_ROWS() AS total', (err, filteredTotal) => {
connection.release(); connection.release();
if (err) { if (err) {
connection.release();
return callback(err); 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.query('SELECT id, name FROM templates ORDER BY name LIMIT 1000', (err, rows) => {
connection.release(); connection.release();
if (err) { if (err) {
connection.release();
return callback(err); return callback(err);
} }
return callback(null, (rows || []).map(tools.convertKeys)); return callback(null, (rows || []).map(tools.convertKeys));

View file

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

View file

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