diff --git a/lib/models/campaigns.js b/lib/models/campaigns.js index 3cc7b8c2..c78320f3 100644 --- a/lib/models/campaigns.js +++ b/lib/models/campaigns.js @@ -704,38 +704,42 @@ module.exports.update = (id, updates, callback) => { } connection.query('SELECT `type`, `source_url` FROM campaigns WHERE id=? LIMIT 1', [id], (err, rows) => { + connection.release(); if (err) { - connection.release(); return callback(err); } if (!rows || !rows[0] || rows[0].type !== 2) { // if not RSS, then nothing to do here - connection.release(); return callback(null, affected); } // update seen rss entries to avoid sending old entries to subscribers feed.fetch(rows[0].source_url, (err, entries) => { if (err) { - connection.release(); return callback(err); } - let query = 'INSERT IGNORE INTO `rss` (`parent`,`guid`,`pubdate`) VALUES ' + entries.map(() => '(?,?,?)').join(','); - - values = []; - entries.forEach(entry => { - values.push(id, entry.guid, entry.date); - }); - - connection.query(query, values, err => { - connection.release(); + db.getConnection((err, connection) => { if (err) { - // too late to report as failed - log.error('RSS', err); + return callback(err); } - return callback(null, affected); + + let query = 'INSERT IGNORE INTO `rss` (`parent`,`guid`,`pubdate`) VALUES ' + entries.map(() => '(?,?,?)').join(','); + + values = []; + entries.forEach(entry => { + values.push(id, entry.guid, entry.date); + }); + + connection.query(query, values, err => { + connection.release(); + if (err) { + // too late to report as failed + log.error('RSS', err); + } + return callback(null, affected); + }); }); }); }); @@ -830,8 +834,8 @@ module.exports.pause = (id, callback) => { // campaigns marked as status=4 are paused connection.query('UPDATE campaigns SET `status`=4, `status_change`=NOW() WHERE id=? LIMIT 1', [id], err => { + connection.release(); if (err) { - connection.release(); return callback(err); } caches.cache.delete('sender queue'); @@ -904,8 +908,8 @@ module.exports.activate = (id, callback) => { // campaigns marked as status=5 are paused connection.query('UPDATE campaigns SET `status`=6, `status_change`=NOW() WHERE id=? LIMIT 1', [id], err => { + connection.release(); if (err) { - connection.release(); return callback(err); } return callback(null, true); @@ -931,8 +935,8 @@ module.exports.inactivate = (id, callback) => { // campaigns marked as status=6 are paused connection.query('UPDATE campaigns SET `status`=5, `status_change`=NOW() WHERE id=? LIMIT 1', [id], err => { + connection.release(); if (err) { - connection.release(); return callback(err); } return callback(null, true); diff --git a/lib/models/links.js b/lib/models/links.js index 64b2790c..79d09633 100644 --- a/lib/models/links.js +++ b/lib/models/links.js @@ -49,6 +49,7 @@ module.exports.countClick = (remoteIp, campaignCid, listCid, subscriptionCid, li connection.beginTransaction(err => { if (err) { + connection.release(); return callback(err); } @@ -160,6 +161,7 @@ module.exports.countOpen = (remoteIp, campaignCid, listCid, subscriptionCid, cal connection.beginTransaction(err => { if (err) { + connection.release(); return callback(err); } diff --git a/lib/models/subscriptions.js b/lib/models/subscriptions.js index f92392bb..c0a63825 100644 --- a/lib/models/subscriptions.js +++ b/lib/models/subscriptions.js @@ -357,6 +357,7 @@ module.exports.insert = (listId, meta, subscription, callback) => { connection.beginTransaction(err => { if (err) { + connection.release(); return callback(err); } @@ -682,6 +683,7 @@ module.exports.changeStatus = (id, listId, campaignId, status, callback) => { } connection.beginTransaction(err => { if (err) { + connection.release(); return callback(err); } @@ -854,6 +856,7 @@ module.exports.delete = (listId, cid, callback) => { connection.beginTransaction(err => { if (err) { + connection.release(); return callback(err); } diff --git a/lib/models/triggers.js b/lib/models/triggers.js index 63ade1e5..75b4648b 100644 --- a/lib/models/triggers.js +++ b/lib/models/triggers.js @@ -95,7 +95,7 @@ module.exports.getQuery = (id, callback) => { } let limit = 300; - let treshold = 3600 * 24; // time..NOW..time+24h + let treshold = 3600 * 6; // time..NOW..time+6h, 6 hour window after trigger target to detect it let intervalQuery = (column, seconds, treshold) => column + ' <= NOW() - INTERVAL ' + seconds + ' SECOND AND ' + column + ' >= NOW() - INTERVAL ' + (treshold + seconds) + ' SECOND'; @@ -320,8 +320,8 @@ module.exports.delete = (id, callback) => { } connection.query('DELETE FROM triggers WHERE id=? LIMIT 1', [id], (err, result) => { + connection.release(); if (err) { - connection.release(); return callback(err); } @@ -337,11 +337,11 @@ module.exports.delete = (id, callback) => { }; function createTriggerTable(id, callback) { - let query = 'CREATE TABLE `trigger__' + id + '` LIKE `trigger`'; db.getConnection((err, connection) => { if (err) { return callback(err); } + let query = 'CREATE TABLE `trigger__' + id + '` LIKE `trigger`'; connection.query(query, err => { connection.release(); if (err) { @@ -353,11 +353,11 @@ function createTriggerTable(id, callback) { } function removeTriggerTable(id, callback) { - let query = 'DROP TABLE IF EXISTS `trigger__' + id + '`'; db.getConnection((err, connection) => { if (err) { return callback(err); } + let query = 'DROP TABLE IF EXISTS `trigger__' + id + '`'; connection.query(query, err => { connection.release(); if (err) { diff --git a/services/sender.js b/services/sender.js index 09c9ffab..603b5ce2 100644 --- a/services/sender.js +++ b/services/sender.js @@ -170,10 +170,11 @@ function findUnsent(callback) { if (!rows || !rows.length) { // everything already processed for this campaign - return connection.query('UPDATE campaigns SET `status`=3, `status_change`=NOW() WHERE id=? LIMIT 1', [campaign.id], () => { + connection.query('UPDATE campaigns SET `status`=3, `status_change`=NOW() WHERE id=? LIMIT 1', [campaign.id], () => { connection.release(); return callback(null, false); }); + return; } connection.release(); diff --git a/services/triggers.js b/services/triggers.js index 81d93331..be14d81c 100644 --- a/services/triggers.js +++ b/services/triggers.js @@ -68,12 +68,14 @@ function fireTrigger(trigger, callback) { } if (!rows || !rows.length) { + connection.release(); return callback(null, trigger.id); } let pos = 0; let insertNext = () => { if (pos >= rows.length) { + connection.release(); return callback(null, trigger.id); } let subscriber = rows[pos++].id;