diff --git a/backend/src/models/redis.model.ts b/backend/src/models/redis.model.ts index 1ae36de..cd27d34 100644 --- a/backend/src/models/redis.model.ts +++ b/backend/src/models/redis.model.ts @@ -1,3 +1,4 @@ -export enum RedisKeyPrefix { - LOCK = 'ov_meet_lock:', -} +export const enum RedisLockName { + GARBAGE_COLLECTOR = 'room_garbage_collector', + RECORDING_ACTIVE = 'recording_active', +} \ No newline at end of file diff --git a/backend/src/services/mutex.service.ts b/backend/src/services/mutex.service.ts index 6b141ba..7d574ae 100644 --- a/backend/src/services/mutex.service.ts +++ b/backend/src/services/mutex.service.ts @@ -1,13 +1,13 @@ import Redlock, { Lock } from 'redlock'; import { RedisService } from './redis.service.js'; import { inject, injectable } from 'inversify'; -import { RedisKeyPrefix } from '../models/redis.model.js'; @injectable() export class MutexService { protected redlockWithoutRetry: Redlock; protected locks: Map; protected readonly TTL_MS = 10_000; + protected LOCK_KEY_PREFIX = 'ov_meet_lock:' constructor(@inject(RedisService) protected redisService: RedisService) { this.redlockWithoutRetry = this.redisService.createRedlock(0); @@ -21,7 +21,7 @@ export class MutexService { * @returns A Promise that resolves to the acquired Lock object. */ async acquire(resource: string, ttl: number = this.TTL_MS): Promise { - resource = RedisKeyPrefix.LOCK + resource; + resource = this.LOCK_KEY_PREFIX + resource; try { const lock = await this.redlockWithoutRetry.acquire([resource], ttl); @@ -39,7 +39,7 @@ export class MutexService { * @returns A Promise that resolves when the lock is released. */ async release(resource: string): Promise { - resource = RedisKeyPrefix.LOCK + resource; + resource = this.LOCK_KEY_PREFIX + resource; const lock = this.locks.get(resource); if (lock) { diff --git a/backend/src/services/task-scheduler.service.ts b/backend/src/services/task-scheduler.service.ts index 121b49e..5ccdcca 100644 --- a/backend/src/services/task-scheduler.service.ts +++ b/backend/src/services/task-scheduler.service.ts @@ -3,6 +3,7 @@ import { LoggerService } from './index.js'; import { SystemEventService } from './system-event.service.js'; import { CronJob } from 'cron'; import { MutexService } from './mutex.service.js'; +import { RedisLockName } from '../models/redis.model.js'; @injectable() export class TaskSchedulerService { @@ -23,7 +24,6 @@ export class TaskSchedulerService { * @returns A promise that resolves when the garbage collector has been successfully started. */ async startRoomGarbageCollector(callbackFn: () => Promise): Promise { - const lockName = 'room-garbage-lock'; const lockTtl = 59 * 60 * 1000; // TTL of 59 minutes if (this.roomGarbageCollectorJob) { @@ -34,7 +34,7 @@ export class TaskSchedulerService { // Create a cron job to run every hour this.roomGarbageCollectorJob = new CronJob('0 * * * *', async () => { try { - const lock = await this.mutexService.acquire(lockName, lockTtl); + const lock = await this.mutexService.acquire(RedisLockName.GARBAGE_COLLECTOR, lockTtl); if (!lock) { this.logger.debug('Failed to acquire lock for room garbage collection. Skipping.');