1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

Fixed parser not being reset in case the redis connection

closed ASAP for overcoming of output buffer limits.

Fixes #1190
This commit is contained in:
Ruben Bridgewater
2017-01-15 13:09:15 +01:00
parent dffa8a6aee
commit db0e8c53cc
3 changed files with 22 additions and 2 deletions

View File

@@ -5,6 +5,7 @@ Changelog
Bugfixes Bugfixes
- Fixed parser not being reset in case the redis connection closed ASAP for overcoming of output buffer limits
- Fixed parser reset if (p)message_buffer listener is attached - Fixed parser reset if (p)message_buffer listener is attached
## v.2.6.4 - 12 Jan, 2017 ## v.2.6.4 - 12 Jan, 2017

View File

@@ -156,8 +156,6 @@ function RedisClient (options, stream) {
this.buffers = options.return_buffers || options.detect_buffers; this.buffers = options.return_buffers || options.detect_buffers;
this.options = options; this.options = options;
this.reply = 'ON'; // Returning replies is the default this.reply = 'ON'; // Returning replies is the default
// Init parser
this.reply_parser = create_parser(this);
this.create_stream(); this.create_stream();
// The listeners will not be attached right away, so let's print the deprecation message while the listener is attached // The listeners will not be attached right away, so let's print the deprecation message while the listener is attached
this.on('newListener', function (event) { this.on('newListener', function (event) {
@@ -230,6 +228,9 @@ function create_parser (self) {
RedisClient.prototype.create_stream = function () { RedisClient.prototype.create_stream = function () {
var self = this; var self = this;
// Init parser
this.reply_parser = create_parser(this);
if (this.options.stream) { if (this.options.stream) {
// Only add the listeners once in case of a reconnect try (that won't work) // Only add the listeners once in case of a reconnect try (that won't work)
if (this.stream) { if (this.stream) {

View File

@@ -38,6 +38,24 @@ describe('The node_redis client', function () {
client.quit(done); client.quit(done);
}); });
it('reset the parser while reconnecting', function (done) {
var client = redis.createClient({
retryStrategy: function () {
return 5;
}
});
client.once('reconnecting', function () {
process.nextTick(function () {
assert.strictEqual(client.reply_parser.buffer, null);
done();
});
});
var partialInput = new Buffer('$100\r\nabcdef');
client.reply_parser.execute(partialInput);
assert.strictEqual(client.reply_parser.buffer.inspect(), partialInput.inspect());
client.stream.destroy();
});
helper.allTests(function (parser, ip, args) { helper.allTests(function (parser, ip, args) {
describe('using ' + parser + ' and ' + ip, function () { describe('using ' + parser + ' and ' + ip, function () {