From 5dfa07adb5ae8f1692a15b0f97ea0694894264c9 Mon Sep 17 00:00:00 2001 From: kontrollanten <6680299+kontrollanten@users.noreply.github.com> Date: Wed, 15 May 2024 23:16:20 +0200 Subject: [PATCH] fix(server/geo-ip): throttle db download --- server/core/helpers/geo-ip.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/server/core/helpers/geo-ip.ts b/server/core/helpers/geo-ip.ts index e68321b9d..dde2949b7 100644 --- a/server/core/helpers/geo-ip.ts +++ b/server/core/helpers/geo-ip.ts @@ -6,6 +6,7 @@ import { CONFIG } from '@server/initializers/config.js' import { logger, loggerTagsFactory } from './logger.js' import { isBinaryResponse, peertubeGot } from './requests.js' import { isArray } from './custom-validators/misc.js' +import { throttle } from 'lodash-es' const lTags = loggerTagsFactory('geo-ip') @@ -15,6 +16,7 @@ export class GeoIP { private countryReader: Reader private cityReader: Reader + private readonly INIT_READERS_RETRY_INTERVAL = 1000 * 60 * 10 // 10 minutes private readonly countryDBPath = join(CONFIG.STORAGE.BIN_DIR, 'dbip-country-lite-latest.mmdb') private readonly cityDBPath = join(CONFIG.STORAGE.BIN_DIR, 'dbip-city-lite-latest.mmdb') @@ -26,7 +28,7 @@ export class GeoIP { if (CONFIG.GEO_IP.ENABLED === false) return emptyResult try { - await this.initReadersIfNeeded() + await this.initReadersIfNeededThrottle() const countryResult = this.countryReader?.get(ip) const cityResult = this.cityReader?.get(ip) @@ -135,6 +137,8 @@ export class GeoIP { } } + private readonly initReadersIfNeededThrottle = throttle(this.initReadersIfNeeded.bind(this), this.INIT_READERS_RETRY_INTERVAL) + // --------------------------------------------------------------------------- static get Instance () {