import { redisClient } from "../db/redis.js"; import { promisify } from "node:util"; import redisLock from "redis-lock"; /** * Retry delay (ms) for lock acquisition */ const retryDelay = 100; const lock = redisClient ? promisify(redisLock(redisClient, retryDelay)) : async ()=>()=>{}; /** * Get AP Object lock * @param uri AP object ID * @param timeout Lock timeout (ms), The timeout releases previous lock. * @returns Unlock function */ export function getApLock(uri, timeout = 30 * 1000) { return lock(`ap-object:${uri}`, timeout); } export function getFetchInstanceMetadataLock(host, timeout = 30 * 1000) { return lock(`instance:${host}`, timeout); } export function getChartInsertLock(lockKey, timeout = 30 * 1000) { return lock(`chart-insert:${lockKey}`, timeout); }