From 97883bac0d3ce84bb738f2fdad9265a477561e18 Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Mon, 25 Jul 2016 18:38:53 +0200 Subject: [PATCH 1/6] Added Redis retry_strategy Most of the ClientOpts that have to do with reconnecting have been deprecated in favor of the `retry_strategy` property. The DefinitelyTyped repo is outdated and is missing the retry_strategy property. See the docs at https://github.com/NodeRedis/node_redis. The following options of ClientOpts are deprecated in favor of retry_strategy: - retry_max_delay - connect_timeout - max_attempts --- redis/redis.d.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/redis/redis.d.ts b/redis/redis.d.ts index 6dd257bd9b..f97095c721 100644 --- a/redis/redis.d.ts +++ b/redis/redis.d.ts @@ -34,6 +34,10 @@ declare module "redis" { versions: number[]; } + interface RetryStrategy { + (options: {error: Error, total_retry_time: number, times_connected: number, attempt: number}): number; + } + export interface ClientOpts { parser?: string; return_buffers?: boolean; @@ -50,6 +54,7 @@ declare module "redis" { family?: string; command_queue_high_water?: number; command_queue_low_water?: number; + retry_strategy?: RetryStrategy; } export interface RedisClient extends NodeJS.EventEmitter { From 75320af160cf8821f07e53914b2c3a8de98e7b47 Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Thu, 28 Jul 2016 14:38:10 +0200 Subject: [PATCH 2/6] Options to standalone interface, allow return Error - Separate RedisRetryStrategyOptions into a separate interface. - Allow the function to return either a number or an Error instead of only a number. --- redis/redis.d.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/redis/redis.d.ts b/redis/redis.d.ts index f97095c721..14d1ab2861 100644 --- a/redis/redis.d.ts +++ b/redis/redis.d.ts @@ -34,8 +34,15 @@ declare module "redis" { versions: number[]; } + interface RedisRetryStrategyOptions { + error: Error; + total_retry_time: number; + times_connected: number; + attempt: number; + } + interface RetryStrategy { - (options: {error: Error, total_retry_time: number, times_connected: number, attempt: number}): number; + (options: RedisRetryStrategyOptions): number | Error; } export interface ClientOpts { From 856e5a2c10ce0714aa5cd7fc3ea1f7d0684c670c Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Thu, 28 Jul 2016 14:39:14 +0200 Subject: [PATCH 3/6] Add retry_strategy tests --- redis/redis-tests.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/redis/redis-tests.ts b/redis/redis-tests.ts index 5acb02465e..23580ebcd7 100644 --- a/redis/redis-tests.ts +++ b/redis/redis-tests.ts @@ -27,6 +27,28 @@ redis.print(err, value); client = redis.createClient(num, str, options); +// Test the `retry_strategy` property +// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- +interface RedisRetryStrategyOptions { + error: Error; + total_retry_time: number; + times_connected: number; + attempt: number; +} +function retryStrategyNumber(options: RedisRetryStrategyOptions): number { + return 5000; +} +function retryStrategyError(options: RedisRetryStrategyOptions): Error { + return new Error('Foo'); +} +redis.createClient({ + retry_strategy: retryStrategyNumber +}); +redis.createClient({ + retry_strategy: retryStrategyError +}); +// ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- + bool = client.connected; num = client.retry_delay; num = client.retry_backoff; From 4dc266fcf4ab03c36e647a867dd6e81e00013895 Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Thu, 28 Jul 2016 15:19:02 +0200 Subject: [PATCH 4/6] Export RetryStrategyOptions and RetryStrategy Export RetryStrategyOptions and RetryStrategy so that it can be used outside of the module to create the RetryStrategy callback. --- redis/redis.d.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/redis/redis.d.ts b/redis/redis.d.ts index 14d1ab2861..de52145261 100644 --- a/redis/redis.d.ts +++ b/redis/redis.d.ts @@ -34,15 +34,15 @@ declare module "redis" { versions: number[]; } - interface RedisRetryStrategyOptions { - error: Error; - total_retry_time: number; - times_connected: number; - attempt: number; + export interface RetryStrategyOptions { + error: Error; + total_retry_time: number; + times_connected: number; + attempt: number; } - interface RetryStrategy { - (options: RedisRetryStrategyOptions): number | Error; + export interface RetryStrategy { + (options: RetryStrategyOptions): number | Error; } export interface ClientOpts { From 81334e8ad1185c9051ace9c1f5aa66d039492fcb Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Thu, 28 Jul 2016 15:19:34 +0200 Subject: [PATCH 5/6] Use exported RetryStrategyOptions in tests --- redis/redis-tests.ts | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/redis/redis-tests.ts b/redis/redis-tests.ts index 23580ebcd7..c25107f64e 100644 --- a/redis/redis-tests.ts +++ b/redis/redis-tests.ts @@ -29,22 +29,16 @@ client = redis.createClient(num, str, options); // Test the `retry_strategy` property // ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- -interface RedisRetryStrategyOptions { - error: Error; - total_retry_time: number; - times_connected: number; - attempt: number; -} -function retryStrategyNumber(options: RedisRetryStrategyOptions): number { +function retryStrategyNumber(options: redis.RetryStrategyOptions): number { return 5000; } -function retryStrategyError(options: RedisRetryStrategyOptions): Error { +function retryStrategyError(options: redis.RetryStrategyOptions): Error { return new Error('Foo'); } -redis.createClient({ +client = redis.createClient({ retry_strategy: retryStrategyNumber }); -redis.createClient({ +client = redis.createClient({ retry_strategy: retryStrategyError }); // ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- From f18cd14bf9cd882d4cf3ae29ed786bf00ce7c41e Mon Sep 17 00:00:00 2001 From: Dani Hodovic Date: Thu, 28 Jul 2016 15:43:52 +0200 Subject: [PATCH 6/6] Type check RetryStrategyOptions props explicitly --- redis/redis-tests.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/redis/redis-tests.ts b/redis/redis-tests.ts index c25107f64e..aadaa40f48 100644 --- a/redis/redis-tests.ts +++ b/redis/redis-tests.ts @@ -30,6 +30,12 @@ client = redis.createClient(num, str, options); // Test the `retry_strategy` property // ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- function retryStrategyNumber(options: redis.RetryStrategyOptions): number { + // Ensure that the properties of RetryStrategyOptions are resilient to breaking change. + // If the properties of the interface changes, the variables below will also need to be adapted. + var error: Error = options.error; + var total_retry_time: number = options.total_retry_time; + var times_connected: number = options.times_connected; + var attempt: number = options.attempt; return 5000; } function retryStrategyError(options: redis.RetryStrategyOptions): Error {