Fix for _PushStatus Stuck 'running' when Count is Off (#4319)
* Fix for _PushStatus stuck 'running' if count is off * use 'count' for batches * push worker test fix
This commit is contained in:
committed by
Florent Vilmart
parent
842343a1a9
commit
c1a7347143
@@ -88,7 +88,7 @@ const defaultColumns = Object.freeze({
|
||||
"failedPerType": {type:'Object'},
|
||||
"sentPerUTCOffset": {type:'Object'},
|
||||
"failedPerUTCOffset": {type:'Object'},
|
||||
"count": {type:'Number'}
|
||||
"count": {type:'Number'} // tracks # of batches queued and pending
|
||||
},
|
||||
_JobStatus: {
|
||||
"jobName": {type: 'String'},
|
||||
|
||||
@@ -40,7 +40,7 @@ export class PushQueue {
|
||||
if (!results || count == 0) {
|
||||
return Promise.reject({error: 'PushController: no results in query'})
|
||||
}
|
||||
pushStatus.setRunning(count);
|
||||
pushStatus.setRunning(Math.ceil(count / limit));
|
||||
let skip = 0;
|
||||
while (skip < count) {
|
||||
const query = { where,
|
||||
|
||||
@@ -190,10 +190,18 @@ export function pushStatusHandler(config, existingObjectId) {
|
||||
});
|
||||
}
|
||||
|
||||
const setRunning = function(count) {
|
||||
logger.verbose(`_PushStatus ${objectId}: sending push to %d installations`, count);
|
||||
return handler.update({status:"pending", objectId: objectId},
|
||||
{status: "running", count });
|
||||
const setRunning = function(batches) {
|
||||
logger.verbose(`_PushStatus ${objectId}: sending push to installations with %d batches`, batches);
|
||||
return handler.update(
|
||||
{
|
||||
status:"pending",
|
||||
objectId: objectId
|
||||
},
|
||||
{
|
||||
status: "running",
|
||||
count: batches
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
const trackSent = function(results, UTCOffset, cleanupInstallations = process.env.PARSE_SERVER_CLEANUP_INVALID_INSTALLATIONS) {
|
||||
@@ -235,7 +243,6 @@ export function pushStatusHandler(config, existingObjectId) {
|
||||
}
|
||||
return memo;
|
||||
}, update);
|
||||
incrementOp(update, 'count', -results.length);
|
||||
}
|
||||
|
||||
logger.verbose(`_PushStatus ${objectId}: sent push! %d success, %d failures`, update.numSent, update.numFailed);
|
||||
@@ -259,6 +266,9 @@ export function pushStatusHandler(config, existingObjectId) {
|
||||
});
|
||||
}
|
||||
|
||||
// indicate this batch is complete
|
||||
incrementOp(update, 'count', -1);
|
||||
|
||||
return handler.update({ objectId }, update).then((res) => {
|
||||
if (res && res.count === 0) {
|
||||
return this.complete();
|
||||
|
||||
Reference in New Issue
Block a user