From 6dc0b51e8faa79ab3a6f62af09e4e73a890ae3ab Mon Sep 17 00:00:00 2001 From: Theophile Sandoz Date: Thu, 7 Dec 2023 10:43:12 +0100 Subject: [PATCH 1/3] Await for `bucketIdsByBagId` to be initialized --- .../resolvers/AssetsResolver/index.ts | 16 +++++++--------- .../resolvers/AssetsResolver/utils.ts | 2 +- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/server-extension/resolvers/AssetsResolver/index.ts b/src/server-extension/resolvers/AssetsResolver/index.ts index cbb715095..acce922db 100644 --- a/src/server-extension/resolvers/AssetsResolver/index.ts +++ b/src/server-extension/resolvers/AssetsResolver/index.ts @@ -29,16 +29,14 @@ export class DistributionBucketsCache { this.logger = rootLogger.child('buckets-cache') } - public init(intervalMs: number): void { + public async init(intervalMs: number): Promise { this.logger.info(`Initializing distribution buckets cache with ${intervalMs}ms interval...`) - this.updateLoop(intervalMs) - .then(() => { - /* Do nothing */ - }) - .catch((err) => { - console.error(err) - process.exit(-1) - }) + try { + await this.updateLoop(intervalMs) + } catch (err) { + console.error(err) + process.exit(-1) + } } public getBucketsByBagId(bagId: string): DistributionBucketCachedData[] { diff --git a/src/server-extension/resolvers/AssetsResolver/utils.ts b/src/server-extension/resolvers/AssetsResolver/utils.ts index d2c9c00dd..d80f0bf19 100644 --- a/src/server-extension/resolvers/AssetsResolver/utils.ts +++ b/src/server-extension/resolvers/AssetsResolver/utils.ts @@ -21,7 +21,7 @@ export async function getAssetUrls( if (!distributionBucketsCache) { distributionBucketsCache = new DistributionBucketsCache() - distributionBucketsCache.init(6000) + await distributionBucketsCache.init(6000) } const buckets = distributionBucketsCache.getBucketsByBagId(bagId) From 00451d771f79a4438d7112400a70752eec4f59db Mon Sep 17 00:00:00 2001 From: Theophile Sandoz Date: Fri, 8 Dec 2023 12:44:03 +0100 Subject: [PATCH 2/3] Await for only the run of the update loop --- .../resolvers/AssetsResolver/index.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/server-extension/resolvers/AssetsResolver/index.ts b/src/server-extension/resolvers/AssetsResolver/index.ts index acce922db..9d13f36bd 100644 --- a/src/server-extension/resolvers/AssetsResolver/index.ts +++ b/src/server-extension/resolvers/AssetsResolver/index.ts @@ -32,7 +32,11 @@ export class DistributionBucketsCache { public async init(intervalMs: number): Promise { this.logger.info(`Initializing distribution buckets cache with ${intervalMs}ms interval...`) try { - await this.updateLoop(intervalMs) + await new Promise((resolve) => { + this.updateLoop(intervalMs, resolve).catch((err) => { + throw err + }) + }) } catch (err) { console.error(err) process.exit(-1) @@ -47,8 +51,10 @@ export class DistributionBucketsCache { }) } - private async updateLoop(intervalMs: number): Promise { + private async updateLoop(intervalMs: number, onFirstRun: () => void): Promise { this.em = await globalEm + let isFirstRun = true + while (true) { try { this.logger.debug('Reloading distribution buckets and bags cache data...') @@ -61,6 +67,11 @@ export class DistributionBucketsCache { ) this.logger.debug(`Buckets cached: ${this.bucketsById.size}`) this.logger.debug(`Bags cached: ${this.bucketIdsByBagId.size}`) + + if (isFirstRun) { + isFirstRun = false + onFirstRun() + } } catch (e) { this.logger.error(`Cannot reload the cache: ${e instanceof Error ? e.message : ''}`) } From 0fa2329d8183381286e0f1834ff6c3fc412942b0 Mon Sep 17 00:00:00 2001 From: Ignazio Bovo Date: Fri, 8 Dec 2023 13:45:53 +0100 Subject: [PATCH 3/3] fix: process exit successfully/unsuccessfully --- src/mail-scheduler/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/mail-scheduler/index.ts b/src/mail-scheduler/index.ts index 68f22f417..31c773556 100644 --- a/src/mail-scheduler/index.ts +++ b/src/mail-scheduler/index.ts @@ -62,7 +62,9 @@ export async function main() { main() .then(() => { console.log('Email delivery finished') + process.exit(0) }) .catch((err) => { console.error('Email delivery failed', err) + process.exit(1) })