From 0392473ecdcb55f9923ad9a43f388702f205ad22 Mon Sep 17 00:00:00 2001 From: Andris Reinman Date: Tue, 5 Apr 2016 15:29:42 +0300 Subject: [PATCH] Fixed a bunch of MySQL pooling issues where connections were not properly released or were double-released --- lib/models/campaigns.js | 6 ++---- lib/models/fields.js | 4 ++-- lib/models/lists.js | 4 +--- lib/models/segments.js | 2 +- lib/models/subscriptions.js | 2 -- lib/models/templates.js | 1 - lib/models/users.js | 1 + package.json | 3 +++ 8 files changed, 10 insertions(+), 13 deletions(-) diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index b4687371..92b55fac 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -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 => { + connection.release(); if (err) { - connection.release(); 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); diff --git a/lib/models/fields.js b/lib/models/fields.js index 4e7fea38..10857885 100644 --- a/lib/models/fields.js +++ b/lib/models/fields.js @@ -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); }); }); diff --git a/lib/models/lists.js b/lib/models/lists.js index aa64c39b..c464b702 100644 --- a/lib/models/lists.js +++ b/lib/models/lists.js @@ -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) => { + connection.release(); if (err) { - connection.release(); 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); }); }); diff --git a/lib/models/segments.js b/lib/models/segments.js index a1a6ea18..edd28e17 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -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); } diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index 886a6825..f30b0980 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -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); } diff --git a/lib/models/templates.js b/lib/models/templates.js index ef44d8d5..ea54cac3 100644 --- a/lib/models/templates.js +++ b/lib/models/templates.js @@ -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)); diff --git a/lib/models/users.js b/lib/models/users.js index 6d948d09..eb82abee 100644 --- a/lib/models/users.js +++ b/lib/models/users.js @@ -193,6 +193,7 @@ module.exports.sendReset = (username, callback) => { } if (!rows.length) { + connection.release(); return callback(null, false); } diff --git a/package.json b/package.json index 4529562b..03195e8a 100644 --- a/package.json +++ b/package.json @@ -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",