From 6171082825bea885e911018fd201dbbf57d97724 Mon Sep 17 00:00:00 2001 From: Gao Sun Date: Tue, 14 Mar 2023 15:06:02 +0800 Subject: [PATCH] refactor(core): store tenant promise in pool when multiple concurrency requests for the same tenant arrives it would create a lot of promises for the same tenant which is unexpected. directly store the tenant creating promise to avoid it. --- packages/core/src/env-set/index.ts | 4 ---- packages/core/src/tenants/index.ts | 13 +++++++------ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/core/src/env-set/index.ts b/packages/core/src/env-set/index.ts index 6286275a5..7d76b0c28 100644 --- a/packages/core/src/env-set/index.ts +++ b/packages/core/src/env-set/index.ts @@ -52,10 +52,6 @@ export class EnvSet { return this.#pool; } - get poolSafe() { - return this.#pool; - } - get oidc() { if (!this.#oidc) { return throwNotLoadedError(); diff --git a/packages/core/src/tenants/index.ts b/packages/core/src/tenants/index.ts index 1f6f0b39d..d79ece85f 100644 --- a/packages/core/src/tenants/index.ts +++ b/packages/core/src/tenants/index.ts @@ -3,9 +3,10 @@ import LRUCache from 'lru-cache'; import Tenant from './Tenant.js'; export class TenantPool { - protected cache = new LRUCache({ + protected cache = new LRUCache>({ max: 100, - dispose: (tenant) => { + dispose: async (entry) => { + const tenant = await entry; void tenant.dispose(); }, }); @@ -18,7 +19,7 @@ export class TenantPool { } console.log('Init tenant:', tenantId); - const newTenant = await Tenant.create(tenantId); + const newTenant = Tenant.create(tenantId); this.cache.set(tenantId, newTenant); return newTenant; @@ -26,10 +27,10 @@ export class TenantPool { async endAll(): Promise { await Promise.all( - this.cache.dump().map(([, tenant]) => { - const { poolSafe } = tenant.value.envSet; + this.cache.dump().map(async ([, entry]) => { + const tenant = await entry.value; - return poolSafe?.end(); + return tenant.envSet.end(); }) ); }