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

1875 Commits

Author SHA1 Message Date
Jean-Hugues Pinson
074555396b override select method to store selected db in client instance and restore selected db on connect 2011-10-20 10:01:47 +02:00
Felix Geisendörfer
61ddce87fa Fix bad reference to 'this' 2011-10-19 14:48:01 +02: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
bobrik
0c1c8cab83 added test for optional callbacks 2011-10-15 17:07:40 +04:00
Ian Babrou
f30ecbe561 added ability to pass undefined instead of callback 2011-10-02 11:42:23 +04:00
Matt Ranney
3e95c55a03 Fix for [GH-127]
Re-initialize the reply parser for every new connection.  If a connection is terminated,
the parser could be left in a bad state.  After the auto-reconnect magic kicks in, it
tries to reuse the old parser, which will not work.

This change is visible to client programs if you depend on client.reply_parser.name being
set immediately.  It will now only be set after a connection is established.

Thanks to @jhurliman for reporting and @pietern for the fix suggestion.
2011-08-11 11:00:02 -07:00
Matt Ranney
688b838be7 Revert "Fixes the case where if the quit() method is called, the closing variable checks are not honoured."
This reverts commit 263965ae44.

Conflicts:

	index.js
v0.6.7
2011-07-30 17:29:39 -07:00
Matt Ranney
50d9f8d45e Fix and test for [GH-123]
Passing an Array as as the last argument should expand as users
expect.  The old behavior was to coerce the arguments into Strings,
which did surprising things with Arrays.
2011-07-30 17:24:10 -07:00
Matt Ranney
6d9298e418 Merge pull request #122 from markdaws/master
Bug when calling quit()
2011-07-30 16:49:42 -07:00
Mark Dawson
263965ae44 Fixes the case where if the quit() method is called, the closing variable checks are not honoured. 2011-07-18 22:08:43 -07: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!
v0.6.5
2011-07-06 09:49:40 -05:00
Matt Ranney
49300363e4 Merge pull request #118 from dvv/master
fix for drain event
2011-07-06 07:28:37 -07:00
Matt Ranney
256ce6b736 Merge pull request #119 from umairsiddique/master
SlowBuffer support
2011-07-06 07:18:07 -07:00
Matt Ranney
d99f3d988e Merge pull request #120 from lp/master
commodity exports.Multi
2011-07-06 07:03:08 -07:00
Louis-Philippe Perron
abc647ccb5 exports Multi as commodity 2011-07-04 15:18:03 -04:00
Umair Siddique
769748f473 Now it works with SlowBuffer too. 2011-07-04 06:13:29 +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
891529c06a Fix bug with optional callbacks for hmset. 2011-06-30 16:13:57 -06:00
Matt Ranney
04b4db8723 Mention EVAL. 2011-06-30 15:33:27 -06:00
Matt Ranney
bd21c73b81 Move usage example to the top. 2011-06-30 15:31:03 -06:00
Matt Ranney
68774e071c Update description of hiredis and JS parser. 2011-06-30 15:27:49 -06:00
Matt Ranney
886b3355e1 Bugs fixed:
*  authentication retry while server is loading db (danmaz74) [GH-101]
*  command arguments processing issue with arrays

New features:

*  Auto update of new commands from redis.io (Dave Hoover)
*  Performance improvements and backpressure controls.
*  Commands now return the true/false value from the underlying socket write(s).
*  Implement command_queue high water and low water for more better control of queueing.

See `examples/backpressure_drain.js` for more information.
v0.6.2
2011-06-30 14:29:58 -06:00
Matt Ranney
fa272cf763 authentication retry while server is loading db (danmaz74) [GH-101] 2011-06-30 14:29:15 -06:00
Matt Ranney
f9e17556d2 Performance improvements and backpressure controls.
Simply and speed up command argument processing logic.
Commands now return the true/false value from the underlying socket write(s).
Implement command_queue high water and low water for more better control of queueing.
2011-06-30 14:12:35 -06:00
Matt Ranney
13914295a6 Merge pull request #101 from danmaz74/master
Fix bug with authentication and LOADING error response.
2011-06-30 11:19:20 -07:00
Matt Ranney
6e5112d664 Add support and tests for Redis scripting through EXEC command.
Bug fix for monitor mode.  (forddg)

Auto update of new commands from redis.io (Dave Hoover)
v0.6.1
2011-06-29 00:45:43 -07:00
Matt Ranney
707c9ab3df Add static list of commands to those downloaded from redis.io. 2011-06-28 22:48:30 -07:00
Matt Ranney
4b988bdb60 Bug fix for monitor mode. (forddg)
Also some whitespace fix for JSHint.
2011-06-12 14:35:21 -10:00
Matt Ranney
3d36711563 Auto update of new commands from redis.io (Dave Hoover)
Run this: node generate_commands.js

To fetch redis.io/commands.json and save it to a file that node_redis will read at startup.
2011-06-12 14:25:57 -10:00
Matt Ranney
d6b5e8b7d3 Merge pull request #107 from redsquirrel/master
The 'somehow' in 'This list needs to be updated, and perhaps auto-updated somehow'
2011-06-12 17:14:38 -07:00
Dave Hoover
e6b29c6846 Simplifying writeCommandsToFile /ht @polgfred 2011-06-02 21:52:03 -05:00
Dave Hoover
e210755b52 Developing the 'somehow' in 'This list [of commands] needs to be updated, and perhaps auto-updated somehow' 2011-06-02 21:12:13 -05:00
unknown
719d4f74cc Fixed a bug when the client tries to authenticate to the redis server and the server is still loading the database: Now the client tries to authenticate again every 2 seconds until actually authenticated. "connect" is only emitted after authentication if authentication is required. 2011-05-08 19:57:27 +02:00
Matt Ranney
c73af8d477 Update changelog 2011-04-21 16:57:22 -10:00
Matt Ranney
2c0ae38fb6 Update changelog. 2011-04-21 16:51:31 -10: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]
v0.6.0
2011-04-21 16:48:14 -10:00
Matt Ranney
f624fa6234 Added DISCARD
I originally didn't think DISCARD would do anything here because of the clever MULTI interface, but somebody
pointed out to me that DISCARD can be used to flush the WATCH set.
v0.5.11
2011-04-07 08:58:01 -07:00
Matt Ranney
2b8b2cbd7f Added HVALS command v0.5.10 2011-04-06 09:50:29 -07:00
Matt Ranney
69a2572890 Fix bug with empty Array arguments - Andy Ray v0.5.9 2011-03-14 17:03:07 -10:00
Andy Ray
bbd48a6fac fix for issue of saving document with buffer AND array on it 2011-03-14 16:02:09 -10:00
Matt Ranney
850d129629 Add monitor example. 2011-03-14 15:53:30 -10:00
Matt Ranney
2fcc947f11 Add MONITOR command and special monitor command reply parsing. v0.5.8 2011-03-14 15:50:47 -10:00
Matt Ranney
1a14e24faa Add magical auth command.
Authentication is now remembered by the client and will be automatically sent to the server
on every connection, including any reconnections.
2011-02-27 23:10:44 -10:00
Matt Ranney
2534f740aa Update pub_sub example to show where to put auth. 2011-02-22 21:59:57 -10:00
Matt Ranney
29e09c1c16 Fix bug in ready check with return_buffers set to true.
Thanks to Dean Mao and Austin Chau.
v0.5.6
2011-02-22 21:10:50 -10:00
Matt Ranney
99ae085e40 Document ready check changes. 2011-02-16 15:59:17 -10:00