Permalink
Browse files

Merge branch 'add-retry-max' of https://github.com/tomaszdurka/node_r…

…edis into tomaszdurka-add-retry-max
  • Loading branch information...
2 parents 78d8f9e + 3759291 commit d03d747145d2ab4a78fb3d319122b641ba8b54b6 @brycebaril brycebaril committed Mar 17, 2013
Showing with 34 additions and 2 deletions.
  1. +3 −0 README.md
  2. +9 −2 index.js
  3. +22 −0 test.js
View
@@ -202,6 +202,9 @@ connection to the redis server, commands are added to a queue and are executed
once the connection has been established. Setting `enable_offline_queue` to
`false` will disable this feature and the callback will be execute immediately
with an error, or an error will be thrown if no callback is specified.
+* `retry_max_delay`: defaults to `null`. By default every time the client tries to connect and fails time before
+reconnection (delay) almost doubles. This delay normally grows infinitely, but setting `retry_max_delay` limits delay
+to maximum value, provided in miliseconds.
```js
var redis = require("redis"),
View
@@ -51,11 +51,14 @@ function RedisClient(stream, options) {
if (options.connect_timeout && !isNaN(options.connect_timeout) && options.connect_timeout > 0) {
this.connect_timeout = +options.connect_timeout;
}
-
this.enable_offline_queue = true;
if (typeof this.options.enable_offline_queue === "boolean") {
this.enable_offline_queue = this.options.enable_offline_queue;
}
+ this.retry_max_delay = null;
+ if (options.retry_max_delay !== undefined && !isNaN(options.retry_max_delay) && options.retry_max_delay > 0) {
+ this.retry_max_delay = options.retry_max_delay;
+ }
this.initialize_retry_vars();
this.pub_sub_mode = false;
@@ -429,7 +432,11 @@ RedisClient.prototype.connection_gone = function (why) {
return;
}
- this.retry_delay = Math.floor(this.retry_delay * this.retry_backoff);
+ if (this.retry_max_delay !== null && this.retry_delay > this.retry_max_delay) {
+ this.retry_delay = this.retry_max_delay;
+ } else {
+ this.retry_delay = Math.floor(this.retry_delay * this.retry_backoff);
+ }
if (exports.debug_mode) {
console.log("Retry connection in " + this.retry_delay + " ms");
View
22 test.js
@@ -1846,6 +1846,28 @@ tests.auth = function () {
});
};
+tests.reconnectRetryMaxDelay = function() {
+ var time = new Date().getTime(),
+ name = 'reconnectRetryMaxDelay',
+ reconnecting = false;
+ var client = redis.createClient(PORT, HOST, {
+ retry_max_delay: 1
+ });
+ client.on('ready', function() {
+ if (!reconnecting) {
+ reconnecting = true;
+ client.retry_delay = 1000;
+ client.retry_backoff = 1;
+ client.stream.end();
+ } else {
+ client.end();
+ var lasted = new Date().getTime() - time;
+ assert.ok(lasted < 1000);
+ next(name);
+ }
+ });
+};
+
all_tests = Object.keys(tests);
all_start = new Date();
test_count = 0;

0 comments on commit d03d747

Please sign in to comment.