From 7d8417be5328889a2674397424a5f4ec1e2cc72d Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Tue, 25 Mar 2025 10:35:43 +0100 Subject: [PATCH] backend: Add recording lock TTL configuration and refactor lock acquisition method --- backend/src/environment.ts | 2 ++ backend/src/services/recording.service.ts | 11 +++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/backend/src/environment.ts b/backend/src/environment.ts index 582ba1f..ab88096 100644 --- a/backend/src/environment.ts +++ b/backend/src/environment.ts @@ -70,6 +70,8 @@ export const ACCESS_TOKEN_COOKIE_NAME = 'OvMeetAccessToken'; export const REFRESH_TOKEN_COOKIE_NAME = 'OvMeetRefreshToken'; export const MEET_S3_ROOMS_PREFIX = 'rooms'; export const MEET_S3_RECORDINGS_PREFIX = 'recordings'; +// Time to live for the active recording lock in Redis +export const MEET_RECORDING_LOCK_TTL = '6h'; export function checkModuleEnabled() { if (MODULES_FILE) { diff --git a/backend/src/services/recording.service.ts b/backend/src/services/recording.service.ts index 06f3952..118b431 100644 --- a/backend/src/services/recording.service.ts +++ b/backend/src/services/recording.service.ts @@ -16,7 +16,7 @@ import { S3Service } from './s3.service.js'; import { LoggerService } from './logger.service.js'; import { MeetRecordingFilters, MeetRecordingInfo, MeetRecordingStatus } from '@typings-ce'; import { RecordingHelper } from '../helpers/recording.helper.js'; -import { MEET_S3_BUCKET, MEET_S3_RECORDINGS_PREFIX, MEET_S3_SUBBUCKET } from '../environment.js'; +import { MEET_RECORDING_LOCK_TTL, MEET_S3_BUCKET, MEET_S3_RECORDINGS_PREFIX, MEET_S3_SUBBUCKET } from '../environment.js'; import { RoomService } from './room.service.js'; import { inject, injectable } from '../config/dependency-injector.config.js'; import { MutexService, RedisLock } from './mutex.service.js'; @@ -272,14 +272,13 @@ export class RecordingService { * * The active recording lock will be released when the recording ends (handleEgressEnded) or when the room is finished (handleMeetingFinished). * - * @param roomName - The name of the room to acquire the lock for. + * @param roomId - The name of the room to acquire the lock for. */ - async acquireRoomRecordingActiveLock(roomName: string): Promise { - const lockName = `${roomName}_${RedisLockName.RECORDING_ACTIVE}`; - const LOCK_TTL = ms('6h'); + async acquireRoomRecordingActiveLock(roomId: string): Promise { + const lockName = `${roomId}_${RedisLockName.RECORDING_ACTIVE}`; try { - const lock = await this.mutexService.acquire(lockName, LOCK_TTL); + const lock = await this.mutexService.acquire(lockName, ms(MEET_RECORDING_LOCK_TTL)); return lock; } catch (error) { this.logger.warn(`Error acquiring lock ${lockName} on egress started: ${error}`);