Browse Source

Improve implementation of isHealthy()

pull/4868/head
Thomas Kaul 3 months ago
parent
commit
ce9ad7e623
  1. 20
      apps/api/src/app/redis-cache/redis-cache.service.ts

20
apps/api/src/app/redis-cache/redis-cache.service.ts

@ -79,12 +79,22 @@ export class RedisCacheService {
}
public async isHealthy() {
const testKey = '__health_check__';
const testValue = Date.now().toString();
try {
await Promise.race([
this.getKeys(),
(async () => {
await this.set(testKey, testValue, ms('1 second'));
const result = await this.get(testKey);
if (result !== testValue) {
throw new Error('Redis health check failed: value mismatch');
}
})(),
new Promise((_, reject) =>
setTimeout(
() => reject(new Error('Redis health check timeout')),
() => reject(new Error('Redis health check failed: timeout')),
ms('2 seconds')
)
)
@ -92,7 +102,13 @@ export class RedisCacheService {
return true;
} catch (error) {
Logger.error(error?.message, 'RedisCacheService');
return false;
} finally {
try {
await this.remove(testKey);
} catch {}
}
}

Loading…
Cancel
Save