From 0d66ce9eac1cfc51670531c6083c6eb18fb118f2 Mon Sep 17 00:00:00 2001 From: Ali Ince Date: Thu, 23 May 2019 12:59:50 +0100 Subject: [PATCH 1/2] Fix an issue in error handling when pool is purged --- src/v1/internal/pool.js | 8 +++++++- test/internal/pool.test.js | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/v1/internal/pool.js b/src/v1/internal/pool.js index 3c1733756..4a862f0ec 100644 --- a/src/v1/internal/pool.js +++ b/src/v1/internal/pool.js @@ -210,7 +210,10 @@ class Pool { if (this._installIdleObserver) { this._installIdleObserver(resource, { onError: () => { - this._pools[key] = this._pools[key].filter(r => r !== resource) + const pool = this._pools[key] + if (pool) { + this._pools[key] = pool.filter(r => r !== resource) + } this._destroy(resource) } }) @@ -235,6 +238,9 @@ class Pool { const pool = this._pools[key] || [] while (pool.length) { const resource = pool.pop() + if (this._removeIdleObserver) { + this._removeIdleObserver(resource) + } this._destroy(resource) } delete this._pools[key] diff --git a/test/internal/pool.test.js b/test/internal/pool.test.js index ffd947442..8a50511d9 100644 --- a/test/internal/pool.test.js +++ b/test/internal/pool.test.js @@ -866,6 +866,38 @@ describe('Pool', () => { }) }) }) + + it('should clean-up idle observer on purge', done => { + const address = ServerAddress.fromUrl('bolt://localhost:7687') + let resourceCount = 0 + + const pool = new Pool({ + create: (server, release) => + Promise.resolve(new Resource(server, resourceCount++, release)), + destroy: resource => {}, + validate: resource => true, + installIdleObserver: (resource, observer) => { + resource['observer'] = observer + }, + removeIdleObserver: resource => { + delete resource['observer'] + } + }) + + pool.acquire(address).then(resource1 => { + pool.acquire(address).then(resource2 => { + resource1.close() + resource2.close() + + pool.purge(address) + + expect(resource1['observer']).toBeFalsy() + expect(resource2['observer']).toBeFalsy() + + done() + }) + }) + }) }) function expectNoPendingAcquisitionRequests (pool) { From 528294c893117f9498937808881de32d6927d778 Mon Sep 17 00:00:00 2001 From: Ali Ince Date: Thu, 23 May 2019 13:00:07 +0100 Subject: [PATCH 2/2] Increase test timeouts --- test/internal/connection-providers.test.js | 10 ++++++++++ test/internal/http/http-request-runner.test.js | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/test/internal/connection-providers.test.js b/test/internal/connection-providers.test.js index ac28c9571..779a526f9 100644 --- a/test/internal/connection-providers.test.js +++ b/test/internal/connection-providers.test.js @@ -51,6 +51,16 @@ describe('DirectConnectionProvider', () => { }) describe('LoadBalancer', () => { + let originalTimeout + beforeEach(function () { + originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000 + }) + + afterEach(function () { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout + }) + const server0 = ServerAddress.fromUrl('server0') const server1 = ServerAddress.fromUrl('server1') const server2 = ServerAddress.fromUrl('server2') diff --git a/test/internal/http/http-request-runner.test.js b/test/internal/http/http-request-runner.test.js index 76eb1b38b..cf86081dd 100644 --- a/test/internal/http/http-request-runner.test.js +++ b/test/internal/http/http-request-runner.test.js @@ -28,6 +28,16 @@ const VALID_URI = 'http://localhost' const INVALID_URI = 'http://not-localhost' describe('http request runner', () => { + let originalTimeout + beforeEach(function () { + originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL + jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000 + }) + + afterEach(function () { + jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout + }) + it('should begin transaction', done => { if (testUtils.isServer()) { done()