mirror of
https://github.com/ajayyy/SponsorBlockServer.git
synced 2024-11-10 01:02:30 +01:00
Only use redis timeout when db not under load
This commit is contained in:
parent
d607d8b179
commit
c9f7275942
6 changed files with 15 additions and 2 deletions
|
@ -83,7 +83,8 @@ addDefaults(config, {
|
|||
maxTries: 3,
|
||||
maxActiveRequests: 0,
|
||||
timeout: 60000,
|
||||
highLoadThreshold: 10
|
||||
highLoadThreshold: 10,
|
||||
redisTimeoutThreshold: 1000
|
||||
},
|
||||
postgresReadOnly: {
|
||||
enabled: false,
|
||||
|
|
|
@ -9,6 +9,8 @@ export interface IDatabase {
|
|||
prepare(type: QueryType, query: string, params?: any[], options?: QueryOption): Promise<any | any[] | void>;
|
||||
|
||||
highLoad(): boolean;
|
||||
|
||||
shouldUseRedisTimeout(): boolean;
|
||||
}
|
||||
|
||||
export type QueryType = "get" | "all" | "run";
|
|
@ -283,4 +283,8 @@ export class Postgres implements IDatabase {
|
|||
highLoad() {
|
||||
return this.activePostgresRequests > this.config.postgres.highLoadThreshold;
|
||||
}
|
||||
|
||||
shouldUseRedisTimeout() {
|
||||
return this.activePostgresRequests < this.config.postgres.redisTimeoutThreshold;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -108,6 +108,10 @@ export class Sqlite implements IDatabase {
|
|||
highLoad() {
|
||||
return false;
|
||||
}
|
||||
|
||||
shouldUseRedisTimeout() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export interface SqliteConfig {
|
||||
|
|
|
@ -27,6 +27,7 @@ export interface CustomWritePostgresConfig extends CustomPostgresConfig {
|
|||
maxActiveRequests: number;
|
||||
timeout: number;
|
||||
highLoadThreshold: number;
|
||||
redisTimeoutThreshold: number;
|
||||
}
|
||||
|
||||
export interface CustomPostgresReadOnlyConfig extends CustomPostgresConfig {
|
||||
|
|
|
@ -70,7 +70,8 @@ if (config.redis?.enabled) {
|
|||
const start = Date.now();
|
||||
activeRequests++;
|
||||
|
||||
const timeout = config.redis.getTimeout ? setTimeout(() => reject(), config.redis.getTimeout) : null;
|
||||
const shouldUseTimeout = config.redis.getTimeout && db.shouldUseRedisTimeout();
|
||||
const timeout = shouldUseTimeout ? setTimeout(() => reject(), config.redis.getTimeout) : null;
|
||||
const chosenGet = pickChoice(get, getRead);
|
||||
chosenGet(key).then((reply) => {
|
||||
if (timeout !== null) clearTimeout(timeout);
|
||||
|
|
Loading…
Reference in a new issue