From 52be9d4a1c298b10bda4c13df537ff6849573000 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Mon, 12 Sep 2022 16:43:19 +0200 Subject: [PATCH 1/2] Improve purge address of the Pool routine In Browser environments, the WebSocket release can take seconds to finish. This behaviour can make LDAP authentication expired take more time then usual. Purging the connection in parallel speeds up this process. --- packages/bolt-connection/src/pool/pool.js | 4 +- .../bolt-connection/test/pool/pool.test.js | 39 ++++++++++++++++++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/packages/bolt-connection/src/pool/pool.js b/packages/bolt-connection/src/pool/pool.js index 60d0f104f..d23f8f8cf 100644 --- a/packages/bolt-connection/src/pool/pool.js +++ b/packages/bolt-connection/src/pool/pool.js @@ -292,16 +292,18 @@ class Pool { async _purgeKey (key) { const pool = this._pools[key] + const destructionList = [] if (pool) { while (pool.length) { const resource = pool.pop() if (this._removeIdleObserver) { this._removeIdleObserver(resource) } - await this._destroy(resource) + destructionList.push(this._destroy(resource)) } pool.close() delete this._pools[key] + await Promise.all(destructionList) } } diff --git a/packages/bolt-connection/test/pool/pool.test.js b/packages/bolt-connection/test/pool/pool.test.js index 75ab484c0..2037cd8b5 100644 --- a/packages/bolt-connection/test/pool/pool.test.js +++ b/packages/bolt-connection/test/pool/pool.test.js @@ -878,7 +878,7 @@ describe('#unit Pool', () => { expect(resource2.observer).toBeFalsy() }) - it('should thrown aquisition timeout exception if resource takes longer to be created', async () => { + it('should thrown acquisition timeout exception if resource takes longer to be created', async () => { const address = ServerAddress.fromUrl('bolt://localhost:7687') const acquisitionTimeout = 1000 let counter = 0 @@ -911,6 +911,43 @@ describe('#unit Pool', () => { expect(counter).toEqual(1) } }) + + it('should purge resources in parallel', async () => { + const address = ServerAddress.fromUrl('bolt://localhost:7687') + let resourceCount = 0 + const resourcesReleased = [] + let resolveRelease + const releasePromise = new Promise((resolve) => { + resolveRelease = resolve + }) + + const pool = new Pool({ + create: (server, release) => + Promise.resolve(new Resource(server, resourceCount++, release)), + destroy: res => { + resourcesReleased.push(res) + resourceCount-- + // Only destroy when the last resource + // get destroyed + if (resourceCount === 0) { + resolveRelease() + } + return releasePromise + }, + validate: res => true + }) + + const resource1 = await pool.acquire(address) + const resource2 = await pool.acquire(address) + await resource1.close() + await resource2.close() + + await pool.purge(address) + + expect(resourcesReleased).toEqual([ + resource2, resource1 + ]) + }) }) function expectNoPendingAcquisitionRequests (pool) { From e77d5b30120591050dde52841389b1beff7c5469 Mon Sep 17 00:00:00 2001 From: Antonio Barcelos Date: Tue, 13 Sep 2022 10:25:54 +0200 Subject: [PATCH 2/2] Rename a test --- packages/neo4j-driver/test/temporal-types.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/neo4j-driver/test/temporal-types.test.js b/packages/neo4j-driver/test/temporal-types.test.js index 240799259..39733e8fe 100644 --- a/packages/neo4j-driver/test/temporal-types.test.js +++ b/packages/neo4j-driver/test/temporal-types.test.js @@ -354,7 +354,7 @@ describe('#integration temporal-types', () => { await testSendAndReceiveRandomTemporalValues(() => randomLocalDateTime()) }, 60000) - it('should send and receive random LocalDateTime', async () => { + it('should send and receive array of random LocalDateTime', async () => { if (neo4jDoesNotSupportTemporalTypes()) { return }