From aa20a9d084d704bd2a016193d64e25091c33c401 Mon Sep 17 00:00:00 2001
From: Andrei Cioromila <andrei.cioromila@thinslices.com>
Date: Wed, 20 Feb 2019 16:42:12 +0200
Subject: [PATCH] fix(jobs): Cancel jobs sequentially so we don't exhaust the
 db connection pool

---
 packages/component-invite/package.json             |  5 +++--
 .../src/routes/collectionsInvitations/delete.js    | 14 ++++++++------
 yarn.lock                                          |  2 +-
 3 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/packages/component-invite/package.json b/packages/component-invite/package.json
index 28a8d8eab..594240db2 100644
--- a/packages/component-invite/package.json
+++ b/packages/component-invite/package.json
@@ -19,6 +19,7 @@
     "path": "component-invite"
   },
   "dependencies": {
+    "bluebird": "^3.5.3",
     "body-parser": "^1.17.2",
     "chance": "^1.0.13",
     "moment": "^2.23.0"
@@ -26,8 +27,8 @@
   "peerDependencies": {
     "@pubsweet/component-send-email": "0.2.4",
     "@pubsweet/logger": "^0.0.1",
-    "pubsweet-server": "^10.0.0",
-    "pubsweet-component-jobs": "0.0.1"
+    "pubsweet-component-jobs": "0.0.1",
+    "pubsweet-server": "^10.0.0"
   },
   "devDependencies": {
     "apidoc": "^0.17.6",
diff --git a/packages/component-invite/src/routes/collectionsInvitations/delete.js b/packages/component-invite/src/routes/collectionsInvitations/delete.js
index 54d4f0d75..e0378a2fb 100644
--- a/packages/component-invite/src/routes/collectionsInvitations/delete.js
+++ b/packages/component-invite/src/routes/collectionsInvitations/delete.js
@@ -1,3 +1,5 @@
+const { last, get, chain, difference } = require('lodash')
+const Promise = require('bluebird')
 const config = require('config')
 
 const {
@@ -12,8 +14,6 @@ const {
 
 const Job = require('pubsweet-component-jobs')
 
-const { last, get, chain, difference } = require('lodash')
-
 const s3Config = get(config, 'pubsweet-component-aws-s3', {})
 
 const notifications = require('./emails/notifications')
@@ -134,10 +134,12 @@ module.exports = models => async (req, res) => {
         })),
       ]
 
-      fragment.invitations.forEach(inv => {
-        Job.cancelQueue(`removal-${inv.userId}-${inv.id}`)
-        Job.cancelQueue(`reminders-${inv.userId}-${inv.id}`)
-      })
+      await Promise.each(fragment.invitations, async inv =>
+        Promise.all([
+          Job.cancelQueue(`removal-${inv.userId}-${inv.id}`),
+          Job.cancelQueue(`reminders-${inv.userId}-${inv.id}`),
+        ]),
+      )
 
       fragment.invitations = []
       fragment.recommendations = []
diff --git a/yarn.lock b/yarn.lock
index 6766261b3..f35ca675f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1990,7 +1990,7 @@ bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.1:
   version "3.5.1"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9"
 
-bluebird@^3.5.2:
+bluebird@^3.5.2, bluebird@^3.5.3:
   version "3.5.3"
   resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7"
 
-- 
GitLab