From 8bd80cab811bd85fb28f548149942c654cda34c7 Mon Sep 17 00:00:00 2001 From: Alex Petty Date: Thu, 10 Jan 2019 14:44:56 -0600 Subject: [PATCH 1/3] Correct cluster options type to match what's actually happening within ioredis. Non-Numbers can be returned to end the retry loop --- types/ioredis/index.d.ts | 3 ++- types/ioredis/ioredis-tests.ts | 9 +++++++++ types/ioredis/v3/index.d.ts | 3 ++- types/ioredis/v3/ioredis-tests.ts | 9 +++++++++ 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/types/ioredis/index.d.ts b/types/ioredis/index.d.ts index acd380e7db..7794f9a5f1 100644 --- a/types/ioredis/index.d.ts +++ b/types/ioredis/index.d.ts @@ -10,6 +10,7 @@ // Dmitry Motovilov // Oleg Repin // Ting-Wai To +// Alex Petty // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 @@ -972,7 +973,7 @@ declare namespace IORedis { } interface ClusterOptions { - clusterRetryStrategy?(times: number): number; + clusterRetryStrategy?(times: number): number | null; enableOfflineQueue?: boolean; enableReadyCheck?: boolean; scaleReads?: string; diff --git a/types/ioredis/ioredis-tests.ts b/types/ioredis/ioredis-tests.ts index df8e37aca8..e2700ebcfb 100644 --- a/types/ioredis/ioredis-tests.ts +++ b/types/ioredis/ioredis-tests.ts @@ -192,3 +192,12 @@ redis.xread('STREAMS', 'streamName', '0-0'); redis.xreadgroup('GROUP', 'groupName', 'consumerName', 'STREAMS', 'streamName', '>'); redis.xrevrange('streamName', '+', '-', 'COUNT', 1); redis.xtrim('streamName', 'MAXLEN', '~', 1000); + +// ClusterRetryStrategy can return non-numbers to stop retrying +new Redis.Cluster([], { + clusterRetryStrategy: () => null +}); + +new Redis.Cluster([], { + clusterRetryStrategy: () => 1 +}); diff --git a/types/ioredis/v3/index.d.ts b/types/ioredis/v3/index.d.ts index ee2777c92c..03667cd071 100644 --- a/types/ioredis/v3/index.d.ts +++ b/types/ioredis/v3/index.d.ts @@ -7,6 +7,7 @@ // Shahar Mor // Whemoon Jang // Francis Gulotta +// Alex Petty // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.8 @@ -894,7 +895,7 @@ declare namespace IORedis { } interface ClusterOptions { - clusterRetryStrategy?(times: number): number; + clusterRetryStrategy?(times: number): number | null; enableOfflineQueue?: boolean; enableReadyCheck?: boolean; scaleReads?: string; diff --git a/types/ioredis/v3/ioredis-tests.ts b/types/ioredis/v3/ioredis-tests.ts index b77192e3b8..ec5bb8a8ce 100644 --- a/types/ioredis/v3/ioredis-tests.ts +++ b/types/ioredis/v3/ioredis-tests.ts @@ -153,3 +153,12 @@ new Redis.Cluster([{ host: 'localhost', port: 6379 }]); + +// ClusterRetryStrategy can return non-numbers to stop retrying +new Redis.Cluster([], { + clusterRetryStrategy: () => null +}); + +new Redis.Cluster([], { + clusterRetryStrategy: () => 1 +}); From 6887f2179f4178dfe13cdda87307ce49c416c1fb Mon Sep 17 00:00:00 2001 From: Alex Petty Date: Fri, 11 Jan 2019 10:15:11 -0600 Subject: [PATCH 2/3] Update master-tracking ioredis definitions to match ioredis' internal ClusterOptions interface fully. --- types/ioredis/index.d.ts | 12 ++++++++++-- types/ioredis/ioredis-tests.ts | 4 ++-- types/ioredis/v3/ioredis-tests.ts | 4 ++-- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/types/ioredis/index.d.ts b/types/ioredis/index.d.ts index 7794f9a5f1..3de80afd22 100644 --- a/types/ioredis/index.d.ts +++ b/types/ioredis/index.d.ts @@ -972,16 +972,24 @@ declare namespace IORedis { count?: number; } + export type DNSLookupFunction = (hostname: string, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void) => void + export type NatMap = {[key: string]: {host: string, port: number}} + interface ClusterOptions { - clusterRetryStrategy?(times: number): number | null; + clusterRetryStrategy?(times: number, reason?: Error): number | null; enableOfflineQueue?: boolean; enableReadyCheck?: boolean; - scaleReads?: string; + scaleReads?: string | Function; maxRedirections?: number; retryDelayOnFailover?: number; retryDelayOnClusterDown?: number; retryDelayOnTryAgain?: number; + slotsRefreshTimeout?: number; + slotsRefreshInterval?: number; redisOptions?: RedisOptions; + lazyConnect?: boolean; + dnsLookup?: DNSLookupFunction; + natMap?: NatMap; } interface MultiOptions { diff --git a/types/ioredis/ioredis-tests.ts b/types/ioredis/ioredis-tests.ts index e2700ebcfb..14620b7476 100644 --- a/types/ioredis/ioredis-tests.ts +++ b/types/ioredis/ioredis-tests.ts @@ -195,9 +195,9 @@ redis.xtrim('streamName', 'MAXLEN', '~', 1000); // ClusterRetryStrategy can return non-numbers to stop retrying new Redis.Cluster([], { - clusterRetryStrategy: () => null + clusterRetryStrategy: (times: number, reason?: Error) => null }); new Redis.Cluster([], { - clusterRetryStrategy: () => 1 + clusterRetryStrategy: (times: number, reason?: Error) => 1 }); diff --git a/types/ioredis/v3/ioredis-tests.ts b/types/ioredis/v3/ioredis-tests.ts index ec5bb8a8ce..38cef49b73 100644 --- a/types/ioredis/v3/ioredis-tests.ts +++ b/types/ioredis/v3/ioredis-tests.ts @@ -156,9 +156,9 @@ new Redis.Cluster([{ // ClusterRetryStrategy can return non-numbers to stop retrying new Redis.Cluster([], { - clusterRetryStrategy: () => null + clusterRetryStrategy: (times: number) => null }); new Redis.Cluster([], { - clusterRetryStrategy: () => 1 + clusterRetryStrategy: (times: number) => 1 }); From 1548342f59fc4fc3c41c091a64703ba297d38f2b Mon Sep 17 00:00:00 2001 From: Alex Petty Date: Fri, 11 Jan 2019 10:45:14 -0600 Subject: [PATCH 3/3] fix linter issues with ioredis types copied from ioredis project --- types/ioredis/index.d.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/types/ioredis/index.d.ts b/types/ioredis/index.d.ts index 3de80afd22..ca1d71a0aa 100644 --- a/types/ioredis/index.d.ts +++ b/types/ioredis/index.d.ts @@ -972,14 +972,16 @@ declare namespace IORedis { count?: number; } - export type DNSLookupFunction = (hostname: string, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void) => void - export type NatMap = {[key: string]: {host: string, port: number}} + type DNSLookupFunction = (hostname: string, callback: (err: NodeJS.ErrnoException, address: string, family: number) => void) => void; + interface NatMap { + [key: string]: {host: string, port: number}; + } interface ClusterOptions { clusterRetryStrategy?(times: number, reason?: Error): number | null; enableOfflineQueue?: boolean; enableReadyCheck?: boolean; - scaleReads?: string | Function; + scaleReads?: string; maxRedirections?: number; retryDelayOnFailover?: number; retryDelayOnClusterDown?: number;