diff --git a/lib/firestore/delete.js b/lib/firestore/delete.js index 0bd920b3..09670c12 100644 --- a/lib/firestore/delete.js +++ b/lib/firestore/delete.js @@ -301,6 +301,7 @@ FirestoreDelete.prototype._recursiveBatchDelete = function() { var pageIncoming = false; var lastDocName = undefined; + var retried = {}; var failures = []; var queueLoop = function() { @@ -351,10 +352,11 @@ FirestoreDelete.prototype._recursiveBatchDelete = function() { numOutstanding--; }) .catch(function(e) { - // For server errors, just throw the document back into the queue. - if (e.status >= 500 && e.status < 600) { + // For server errors, retry if the document has not yet been retried. + if (e.status >= 500 && e.status < 600 && !retried[toDelete.name]) { logger.debug("Server error deleting doc " + toDelete.name, e); queue.push(toDelete); + retried[toDelete.name] = true; } else { logger.debug("Fatal error deleting doc " + toDelete.name, e); failures.push(toDelete); @@ -366,7 +368,7 @@ FirestoreDelete.prototype._recursiveBatchDelete = function() { return false; }; - return new Promise(function(resolve) { + return new Promise(function(resolve, reject) { var intervalId = setInterval(function() { if (queueLoop()) { clearInterval(intervalId);