1
0
mirror of https://github.com/redis/node-redis.git synced 2025-09-15 18:41:08 +03:00

14 Commits

Author SHA1 Message Date
Brian Noguchi
2afa0e5acc Add failing test.
The test demonstrates failure for the following scenario. A single-subscription
client calls unsubscribe immediately followed by a subscribe. It will fail when
it tries to receive the next pmessage/message because the client will be in
false pub_sub_mode. Here is why it is false: First, the 2nd subscribe sets
pub_sub_mode to true during send_command. Next, the unsubscribe's
return_reply sets pub_sub_mode to false. The 2nd subscribe's return_reply does
not re-set pub_sub_mode back to true. So the result is a client with false
pub_sub_mode that fails upon receipt of the next message or pmessage.
2012-03-12 22:59:38 -07:00
Matt Ranney
e39e8421bc Fix regression in reconnect logic.
Very much need automated tests for reconnection and queue logic.
2011-11-15 10:48:45 -10:00
Matt Ranney
6a44331acd Fix this/self reference on db re-select. 2011-11-13 20:19:34 -10:00
Matt Ranney
16c79f0d18 Merge pull request #139 from felixge/master
Fix: Hiredis parser traps pubsub event exceptions
2011-11-13 20:23:23 -08:00
Matt Ranney
c74657cdfa Improved reconnect logic. Initial version of reconnect thresholds. 2011-11-10 13:09:39 -10:00
Felix Geisendörfer
fbc1642461 Fix: Hiredis parser traps pubsub event exceptions
While using this module with the hiredis parser, I noticed that exceptions
thrown inside of subscribe/message/etc. callbacks would be reported as
parser error exceptions, which was confusing.

Example:

```
var client = require('./index').createClient();

client.on('subscribe', function() {
  throw new Error('My Error');
});
client.subscribe('channel');
```
I would expect the above to throw 'My Error' as a simple exception, however,
when using the hiredis parser I get:

```
events.js:45
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: Redis reply parser error: Error: My Error
    at RedisClient.<anonymous> (/Users/felix/code/node_redis/hiredis.js:4:9)
    at RedisClient.emit (events.js:67:17)
    at RedisClient.return_reply (/Users/felix/code/node_redis/index.js:457:22)
    at HiredisReplyParser.<anonymous> (/Users/felix/code/node_redis/index.js:220:14)
    at HiredisReplyParser.emit (events.js:64:17)
    at HiredisReplyParser.execute (/Users/felix/code/node_redis/lib/parser/hiredis.js:35:22)
    at RedisClient.on_data (/Users/felix/code/node_redis/index.js:365:27)
    at Socket.<anonymous> (/Users/felix/code/node_redis/index.js:58:14)
    ...
```

The attached patch fixes this problem by changing the way the HiredisReplyParser
traps exceptions, and also provides a unit test for it.

Please let me know if you need any tweaks on the patch for landing it, I was
not quite sure where to put my test / how to structure it, since most test
cases seem to be integration tests at this point.

Also, if you would prefer an integration test for this, here you go:

``` javascript
var client = require('./index').createClient();
var assert = require('assert');

process.on('uncaughtException', function listener(err) {
  process.removeListener('uncaughtException', listener);

  // Drop the stack, otherwise the assert gets trapped by node
  process.nextTick(function() {
    assert.ok(!/parser error/.test(err.message), err.message);
    client.quit();
  });
});

client.on('subscribe', function() {
  throw new Error('My Error');
});
client.subscribe('channel');
```

PS: If you wonder why this only affects pubsub events: This is because
RedisClient#return_reply does exception trapping differently for events than
it does for callbacks.

See: 3e95c55a03/index.js (L431)
Vs: 3e95c55a03/index.js (L447)
2011-10-17 11:07:11 +02:00
Matt Ranney
3cc297ada4 Contributed changes:
*  Support SlowBuffers (Umair Siddique)
*  Add Multi to exports (Louis-Philippe Perron)
*  Fix for drain event calculation (Vladimir Dronnikov)

Thanks!
2011-07-06 09:49:40 -05:00
Vladimir Dronnikov
607cd71208 hz 2011-07-01 09:27:03 -04:00
Vladimir Dronnikov
f93af92fac updated stress tests 2011-07-01 08:40:02 -04:00
Vladimir Dronnikov
cc2c3f7776 another pub/sub strategy 2011-07-01 04:27:59 -04:00
Vladimir Dronnikov
9a4e51ee40 fix for buffered_writes -- now drain event works 2011-07-01 03:46:50 -04:00
Vladimir Dronnikov
02c3b01f0e added leaking stress tests. need to employ ned backpressure feature 2011-07-01 02:51:46 -04:00
Matt Ranney
f10ff9e916 Lots of bugs fixed.
*  connection error did not properly trigger reconnection logic [GH-85]
*  client.hmget(key, [val1, val2]) was not expanding properly [GH-66]
*  client.quit() while in pub/sub mode would throw an error [GH-87]
*  client.multi(['hmset', 'key', {foo: 'bar'}]) fails [GH-92]
2011-04-21 16:48:14 -10:00
Matt Ranney
047d367f8c Organize things a little. 2010-09-24 13:15:37 -07:00