Skip to content

Commit 1b1a59a

Browse files
author
damour
committed
FS & zlib concurrency limit.
1 parent 72a8bce commit 1b1a59a

File tree

3 files changed

+32
-18
lines changed

3 files changed

+32
-18
lines changed

packages/raven-node/lib/client.js

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ var nodeUtil = require('util'); // nodeUtil to avoid confusion with "utils"
1010
var events = require('events');
1111
var domain = require('domain');
1212
var md5 = require('md5');
13+
var Limiter = require('async-limiter');
1314

1415
var instrumentor = require('./instrumentation/instrumentor');
1516

@@ -75,6 +76,7 @@ extend(Raven.prototype, {
7576
this.maxReqQueueCount = options.maxReqQueueCount || 100;
7677
this.parseUser = options.parseUser;
7778
this.stacktrace = options.stacktrace || false;
79+
this.zlibLimiter = new Limiter({concurrency: 25});
7880

7981
if (!this.dsn) {
8082
utils.consoleAlert('no DSN provided, error reporting disabled');
@@ -329,20 +331,24 @@ extend(Raven.prototype, {
329331
var skwargs = stringify(kwargs);
330332
var eventId = kwargs.event_id;
331333

332-
zlib.deflate(skwargs, function(err, buff) {
333-
var message = buff.toString('base64'),
334-
timestamp = new Date().getTime(),
335-
headers = {
336-
'X-Sentry-Auth': utils.getAuthHeader(
337-
timestamp,
338-
self.dsn.public_key,
339-
self.dsn.private_key
340-
),
341-
'Content-Type': 'application/octet-stream',
342-
'Content-Length': message.length
343-
};
344-
345-
self.transport.send(self, message, headers, eventId, cb);
334+
this.zlibLimiter.push(function (done) {
335+
zlib.deflate(skwargs, function(err, buff) {
336+
done();
337+
338+
var message = buff.toString('base64'),
339+
timestamp = new Date().getTime(),
340+
headers = {
341+
'X-Sentry-Auth': utils.getAuthHeader(
342+
timestamp,
343+
self.dsn.public_key,
344+
self.dsn.private_key
345+
),
346+
'Content-Type': 'application/octet-stream',
347+
'Content-Length': message.length
348+
};
349+
350+
self.transport.send(self, message, headers, eventId, cb);
351+
});
346352
});
347353
},
348354

packages/raven-node/lib/utils.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ var transports = require('./transports');
66
var path = require('path');
77
var lsmod = require('../vendor/node-lsmod');
88
var stacktrace = require('stack-trace');
9+
var Limiter = require('async-limiter');
910
var stringify = require('../vendor/json-stringify-safe');
1011

1112
var ravenVersion = require('../package.json').version;
@@ -17,6 +18,8 @@ var protocolMap = {
1718

1819
var consoleAlerts = new Set();
1920

21+
var fsLimiter = new Limiter({concurrency: 25);
22+
2023
// Default Node.js REPL depth
2124
var MAX_SERIALIZE_EXCEPTION_DEPTH = 3;
2225
// 50kB, as 100kB is max payload size, so half sounds reasonable
@@ -279,9 +282,13 @@ function readSourceFiles(filenames, cb) {
279282
var sourceFiles = {};
280283
var numFilesToRead = filenames.length;
281284
return filenames.forEach(function(filename) {
282-
fs.readFile(filename, function(readErr, file) {
283-
if (!readErr) sourceFiles[filename] = file.toString().split('\n');
284-
if (--numFilesToRead === 0) cb(sourceFiles);
285+
fsLimiter.push(function (done) {
286+
fs.readFile(filename, function(readErr, file) {
287+
done();
288+
289+
if (!readErr) sourceFiles[filename] = file.toString().split('\n');
290+
if (--numFilesToRead === 0) cb(sourceFiles);
291+
});
285292
});
286293
});
287294
}

packages/raven-node/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@
2626
"md5": "^2.2.1",
2727
"stack-trace": "0.0.10",
2828
"timed-out": "4.0.1",
29-
"uuid": "3.3.2"
29+
"uuid": "3.3.2",
30+
"async-limiter": "~1.0.0"
3031
},
3132
"devDependencies": {
3233
"coffee-script": "~1.10.0",

0 commit comments

Comments
 (0)