Skip to content

Commit b79f307

Browse files
authored
Prevent out of quota 429 responses from report -> error looping. (#90)
Co-authored-by: Jon Masukawa <jmasukawa@google.com>
1 parent ca41366 commit b79f307

2 files changed

Lines changed: 27 additions & 0 deletions

File tree

stackdriver-errors.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,15 @@ function sendErrorPayload(url, payload) {
179179
var code = xhr.status;
180180
if (code >= 200 && code < 300) {
181181
resolve({message: payload.message});
182+
} else if (code === 429) {
183+
// HTTP 429 responses are returned by Stackdriver when API quota
184+
// is exceeded. We should not try to reject these as unhandled errors
185+
// or we may cause an infinite loop with 'reportUncaughtExceptions'.
186+
reject(
187+
{
188+
message: 'quota or rate limiting error on stackdriver report',
189+
name: 'Http429FakeError',
190+
});
182191
} else {
183192
var condition = code ? code + ' http response' : 'network error';
184193
reject(new Error(condition + ' on stackdriver report'));

test/test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,24 @@ describe('Reporting errors', function() {
249249
expect(err.message).to.equal('503 http response on stackdriver report');
250250
});
251251
});
252+
253+
it('should not handle quota exceeded error responses', function() {
254+
requestHandler = function(req) {
255+
// HTTP 429 returned from Stackdriver after reaching reporting quota.
256+
req.respond(429, {'Content-Type': 'text/plain'}, '');
257+
};
258+
errorHandler.start({key: 'key', projectId: 'projectId'});
259+
var message = 'News that will be rejected on send';
260+
return errorHandler.report(message).then(function() {
261+
throw new Error('unexpected fulfilled report');
262+
}, function(fakeErr) {
263+
expectRequestWithMessage(message);
264+
// We don't expect an Error to be returned in this case.
265+
expect(fakeErr.name).to.equal('Http429FakeError');
266+
expect(fakeErr.message).to.equal(
267+
'quota or rate limiting error on stackdriver report');
268+
});
269+
});
252270
});
253271
});
254272

0 commit comments

Comments
 (0)