From 22446acd8aeefe51b3167623342aa4e15e9d463c Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Thu, 5 Feb 2026 19:16:37 -0600 Subject: [PATCH] fix(CQ-API-4): Remove Redis event listeners in onModuleDestroy Add removeAllListeners() call before quit() to prevent memory leaks from lingering event listeners on the Redis client. Also update test mock to include removeAllListeners method. Refs #339 Co-Authored-By: Claude Opus 4.5 --- apps/api/src/valkey/valkey.service.spec.ts | 4 ++++ apps/api/src/valkey/valkey.service.ts | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/apps/api/src/valkey/valkey.service.spec.ts b/apps/api/src/valkey/valkey.service.spec.ts index 7de2ed2..5faf5ab 100644 --- a/apps/api/src/valkey/valkey.service.spec.ts +++ b/apps/api/src/valkey/valkey.service.spec.ts @@ -24,6 +24,10 @@ vi.mock("ioredis", () => { return this; } + removeAllListeners() { + return this; + } + // String operations async setex(key: string, ttl: number, value: string) { store.set(key, value); diff --git a/apps/api/src/valkey/valkey.service.ts b/apps/api/src/valkey/valkey.service.ts index f20a40a..8547ac1 100644 --- a/apps/api/src/valkey/valkey.service.ts +++ b/apps/api/src/valkey/valkey.service.ts @@ -63,8 +63,10 @@ export class ValkeyService implements OnModuleInit, OnModuleDestroy { } } - async onModuleDestroy() { + async onModuleDestroy(): Promise { this.logger.log("Disconnecting from Valkey"); + // Remove all event listeners to prevent memory leaks + this.client.removeAllListeners(); await this.client.quit(); }