diff --git a/packages/client/lib/client/index.spec.ts b/packages/client/lib/client/index.spec.ts index 442b10ef52..d27bcc2b78 100644 --- a/packages/client/lib/client/index.spec.ts +++ b/packages/client/lib/client/index.spec.ts @@ -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); }); diff --git a/packages/client/lib/client/index.ts b/packages/client/lib/client/index.ts index 9664b3645b..2032c4fb71 100644 --- a/packages/client/lib/client/index.ts +++ b/packages/client/lib/client/index.ts @@ -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({ diff --git a/packages/client/lib/client/socket.ts b/packages/client/lib/client/socket.ts index 224eb3fa88..5fab5c5601 100644 --- a/packages/client/lib/client/socket.ts +++ b/packages/client/lib/client/socket.ts @@ -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(); + } } diff --git a/packages/test-utils/lib/index.ts b/packages/test-utils/lib/index.ts index ac7dad72b3..1e814c2974 100644 --- a/packages/test-utils/lib/index.ts +++ b/packages/test-utils/lib/index.ts @@ -107,7 +107,7 @@ export default class TestUtils { S extends RedisScripts >( title: string, - fn: (client: RedisClientType) => Promise, + fn: (client: RedisClientType) => unknown, options: ClientTestOptions ): void { let dockerPromise: ReturnType; @@ -166,7 +166,7 @@ export default class TestUtils { S extends RedisScripts >( title: string, - fn: (cluster: RedisClusterType) => Promise, + fn: (cluster: RedisClusterType) => unknown, options: ClusterTestOptions ): void { let dockersPromise: ReturnType;