1
0
mirror of https://github.com/redis/node-redis.git synced 2025-08-06 02:15:48 +03:00

Add support for client.unref() and client.ref() (#2188)

* close #2185 - add support for client.unref() and client.ref()

* allow sync tests
This commit is contained in:
Leibale Eidelman
2022-07-13 07:01:20 -04:00
committed by GitHub
parent f9f5e494dd
commit 71d582368a
4 changed files with 31 additions and 2 deletions

View File

@@ -844,4 +844,9 @@ describe('Client', () => {
await client.disconnect();
await client.connect();
}, GLOBAL.SERVERS.OPEN);
testUtils.testWithClient('should be able to use ref and unref', client => {
client.unref();
client.ref();
}, GLOBAL.SERVERS.OPEN);
});

View File

@@ -682,6 +682,14 @@ export default class RedisClient<
await this.#isolationPool.drain();
await this.#isolationPool.clear();
}
ref(): void {
this.#socket.ref();
}
unref(): void {
this.#socket.unref();
}
}
attachCommands({

View File

@@ -78,6 +78,8 @@ export default class RedisSocket extends EventEmitter {
return this.#writableNeedDrain;
}
#isSocketUnrefed = false;
constructor(initiator: RedisSocketInitiator, options?: RedisSocketOptions) {
super();
@@ -137,6 +139,10 @@ export default class RedisSocket extends EventEmitter {
socket.setTimeout(this.#options.connectTimeout, () => socket.destroy(new ConnectionTimeoutError()));
}
if (this.#isSocketUnrefed) {
socket.unref();
}
socket
.setNoDelay(this.#options.noDelay)
.once('error', reject)
@@ -233,4 +239,14 @@ export default class RedisSocket extends EventEmitter {
this.#isCorked = false;
});
}
ref(): void {
this.#isSocketUnrefed = false;
this.#socket?.ref();
}
unref(): void {
this.#isSocketUnrefed = true;
this.#socket?.unref();
}
}

View File

@@ -107,7 +107,7 @@ export default class TestUtils {
S extends RedisScripts
>(
title: string,
fn: (client: RedisClientType<M, F, S>) => Promise<unknown>,
fn: (client: RedisClientType<M, F, S>) => unknown,
options: ClientTestOptions<M, F, S>
): void {
let dockerPromise: ReturnType<typeof spawnRedisServer>;
@@ -166,7 +166,7 @@ export default class TestUtils {
S extends RedisScripts
>(
title: string,
fn: (cluster: RedisClusterType<M, F, S>) => Promise<void>,
fn: (cluster: RedisClusterType<M, F, S>) => unknown,
options: ClusterTestOptions<M, F, S>
): void {
let dockersPromise: ReturnType<typeof spawnRedisCluster>;