Skip to content

Commit d7026f6

Browse files
committed
ref #1671 - add support for defaults
1 parent 1d68406 commit d7026f6

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

lib/cluster-slots.ts

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import calculateSlot from 'cluster-key-slot';
22
import RedisClient, { RedisClientType } from './client';
3-
import { RedisSocketOptions } from './socket';
43
import { RedisClusterMasterNode, RedisClusterReplicaNode } from './commands/CLUSTER_NODES';
54
import { RedisClusterClientOptions, RedisClusterOptions } from './cluster';
65
import { RedisModules } from './commands';
@@ -32,7 +31,7 @@ export default class RedisClusterSlots<M extends RedisModules, S extends RedisLu
3231

3332
async connect(): Promise<void> {
3433
for (const rootNode of this.#options.rootNodes) {
35-
if (await this.#discoverNodes(rootNode)) return;
34+
if (await this.#discoverNodes(this.#clientOptionsDefaults(rootNode))) return;
3635
}
3736

3837
throw new Error('None of the root nodes is available');
@@ -99,6 +98,18 @@ export default class RedisClusterSlots<M extends RedisModules, S extends RedisLu
9998
await Promise.all(promises);
10099
}
101100

101+
#clientOptionsDefaults(options: RedisClusterClientOptions): RedisClusterClientOptions {
102+
if (!this.#options.defaults) return options;
103+
104+
const merged = Object.assign({}, this.#options.defaults, options);
105+
106+
if (options.socket && this.#options.defaults.socket) {
107+
Object.assign({}, this.#options.defaults.socket, options.socket);
108+
}
109+
110+
return merged;
111+
}
112+
102113
#initiateClientForNode(nodeData: RedisClusterMasterNode | RedisClusterReplicaNode, readonly: boolean, clientsInUse: Set<string>, promises: Array<Promise<void>>): ClusterNode<M, S> {
103114
const url = `${nodeData.host}:${nodeData.port}`;
104115
clientsInUse.add(url);
@@ -107,13 +118,15 @@ export default class RedisClusterSlots<M extends RedisModules, S extends RedisLu
107118
if (!node) {
108119
node = {
109120
id: nodeData.id,
110-
client: RedisClient.create({
111-
socket: {
112-
host: nodeData.host,
113-
port: nodeData.port
114-
},
115-
readonly
116-
})
121+
client: RedisClient.create(
122+
this.#clientOptionsDefaults({
123+
socket: {
124+
host: nodeData.host,
125+
port: nodeData.port
126+
},
127+
readonly
128+
})
129+
)
117130
};
118131
promises.push(node.client.connect());
119132
this.#nodeByUrl.set(url, node);

lib/cluster.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export type RedisClusterClientOptions = Omit<RedisClientOptions<{}, {}>, 'module
1010

1111
export interface RedisClusterOptions<M = {}, S = {}> {
1212
rootNodes: Array<RedisClusterClientOptions>;
13-
defaults?: RedisClusterClientOptions;
13+
defaults?: Partial<RedisClusterClientOptions>;
1414
modules?: M;
1515
scripts?: S;
1616
useReplicas?: boolean;

0 commit comments

Comments
 (0)