UNPKG

vulcain-corejs

Version:
54 lines 1.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const system_1 = require("../../globals/system"); const provider_1 = require("./provider"); class MemoryProviderFactory { constructor(dataFolder, maxPoolSize = 20) { this.dataFolder = dataFolder; this.maxPoolSize = maxPoolSize; this.pool = new Map(); } addToPool(context, key, item) { system_1.Service.log.info(context, () => `Adding a new provider pool item : ${key}`); if (this.pool.size >= this.maxPoolSize) { // remove the least used let keyToRemove; let min = 0; for (const [key, value] of this.pool.entries()) { if (!keyToRemove || value.count < min) { keyToRemove = key; min = value.count; } } let item = this.pool.get(keyToRemove); item.dispose && item.dispose(); this.pool.delete(keyToRemove); system_1.Service.log.info(context, () => `Ejecting ${keyToRemove} from provider pool item.`); } item.count = 1; this.pool.set(key, item); } getFromPool(key) { let item = this.pool.get(key); if (item) { item.count++; return item.provider; } } getConnection(context, tenant) { tenant = tenant || context.user.tenant; let poolKey = tenant; let provider = this.getFromPool(poolKey); if (!provider) { provider = new provider_1.MemoryProvider(this.dataFolder); let item = { provider }; item.dispose = provider.initialize(tenant); if (item.dispose) { this.addToPool(context, poolKey, item); } } return provider; } } exports.MemoryProviderFactory = MemoryProviderFactory; //# sourceMappingURL=providerFactory.js.map