Skip to content

Commit 71d5823

Browse files
authored
Add support for client.unref() and client.ref() (#2188)
* close #2185 - add support for client.unref() and client.ref() * allow sync tests
1 parent f9f5e49 commit 71d5823

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

packages/client/lib/client/index.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -844,4 +844,9 @@ describe('Client', () => {
844844
await client.disconnect();
845845
await client.connect();
846846
}, GLOBAL.SERVERS.OPEN);
847+
848+
testUtils.testWithClient('should be able to use ref and unref', client => {
849+
client.unref();
850+
client.ref();
851+
}, GLOBAL.SERVERS.OPEN);
847852
});

packages/client/lib/client/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,14 @@ export default class RedisClient<
682682
await this.#isolationPool.drain();
683683
await this.#isolationPool.clear();
684684
}
685+
686+
ref(): void {
687+
this.#socket.ref();
688+
}
689+
690+
unref(): void {
691+
this.#socket.unref();
692+
}
685693
}
686694

687695
attachCommands({

packages/client/lib/client/socket.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ export default class RedisSocket extends EventEmitter {
7878
return this.#writableNeedDrain;
7979
}
8080

81+
#isSocketUnrefed = false;
82+
8183
constructor(initiator: RedisSocketInitiator, options?: RedisSocketOptions) {
8284
super();
8385

@@ -137,6 +139,10 @@ export default class RedisSocket extends EventEmitter {
137139
socket.setTimeout(this.#options.connectTimeout, () => socket.destroy(new ConnectionTimeoutError()));
138140
}
139141

142+
if (this.#isSocketUnrefed) {
143+
socket.unref();
144+
}
145+
140146
socket
141147
.setNoDelay(this.#options.noDelay)
142148
.once('error', reject)
@@ -233,4 +239,14 @@ export default class RedisSocket extends EventEmitter {
233239
this.#isCorked = false;
234240
});
235241
}
242+
243+
ref(): void {
244+
this.#isSocketUnrefed = false;
245+
this.#socket?.ref();
246+
}
247+
248+
unref(): void {
249+
this.#isSocketUnrefed = true;
250+
this.#socket?.unref();
251+
}
236252
}

packages/test-utils/lib/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ export default class TestUtils {
107107
S extends RedisScripts
108108
>(
109109
title: string,
110-
fn: (client: RedisClientType<M, F, S>) => Promise<unknown>,
110+
fn: (client: RedisClientType<M, F, S>) => unknown,
111111
options: ClientTestOptions<M, F, S>
112112
): void {
113113
let dockerPromise: ReturnType<typeof spawnRedisServer>;
@@ -166,7 +166,7 @@ export default class TestUtils {
166166
S extends RedisScripts
167167
>(
168168
title: string,
169-
fn: (cluster: RedisClusterType<M, F, S>) => Promise<void>,
169+
fn: (cluster: RedisClusterType<M, F, S>) => unknown,
170170
options: ClusterTestOptions<M, F, S>
171171
): void {
172172
let dockersPromise: ReturnType<typeof spawnRedisCluster>;

0 commit comments

Comments
 (0)