From 5f6c704ec86da1e19587ac6f1c467b94d5256f95 Mon Sep 17 00:00:00 2001 From: Florent Vilmart Date: Sat, 23 Jul 2016 09:21:06 +0200 Subject: [PATCH] Make sure _PushStatus operations are run in order --- src/pushStatusHandler.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/pushStatusHandler.js b/src/pushStatusHandler.js index 3bed8cfab8..f75660879a 100644 --- a/src/pushStatusHandler.js +++ b/src/pushStatusHandler.js @@ -20,7 +20,7 @@ export default function pushStatusHandler(config) { let pushStatus; let objectId = newObjectId(); let database = config.database; - + let lastPromise; let setInitial = function(body = {}, where, options = {source: 'rest'}) { let now = new Date(); let data = body.data || {}; @@ -41,19 +41,23 @@ export default function pushStatusHandler(config) { ACL: {} } - return database.create(PUSH_STATUS_COLLECTION, object).then(() => { + lastPromise = database.create(PUSH_STATUS_COLLECTION, object).then(() => { pushStatus = { objectId }; return Promise.resolve(pushStatus); }); + return lastPromise; } let setRunning = function(installations) { logger.verbose('sending push to %d installations', installations.length); - return database.update(PUSH_STATUS_COLLECTION, - {status:"pending", objectId: objectId}, - {status: "running", updatedAt: new Date() }); + lastPromise = lastPromise.then(() => { + return database.update(PUSH_STATUS_COLLECTION, + {status:"pending", objectId: objectId}, + {status: "running", updatedAt: new Date() }); + }); + return lastPromise; } let complete = function(results) { @@ -87,7 +91,10 @@ export default function pushStatusHandler(config) { }, update); } logger.verbose('sent push! %d success, %d failures', update.numSent, update.numFailed); - return database.update(PUSH_STATUS_COLLECTION, {status:"running", objectId }, update); + lastPromise = lastPromise.then(() => { + return database.update(PUSH_STATUS_COLLECTION, {status:"running", objectId }, update); + }); + return lastPromise; } let fail = function(err) { @@ -97,7 +104,10 @@ export default function pushStatusHandler(config) { updatedAt: new Date() } logger.info('warning: error while sending push', err); - return database.update(PUSH_STATUS_COLLECTION, { objectId }, update); + lastPromise = lastPromise.then(() => { + return database.update(PUSH_STATUS_COLLECTION, { objectId }, update); + }); + return lastPromise; } return Object.freeze({