Skip to content

Commit eb2dfdf

Browse files
nihonjinrxsthijs
authored and
thijs
committed
Emit a 'release' event when a connection is released back to the pool (brianc#2845)
1 parent 9550a5b commit eb2dfdf

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

packages/pg-pool/index.js

+2
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,8 @@ class Pool extends EventEmitter {
330330

331331
client._poolUseCount = (client._poolUseCount || 0) + 1
332332

333+
this.emit('release', err, client)
334+
333335
// TODO(bmc): expose a proper, public interface _queryable and _ending
334336
if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) {
335337
if (client._poolUseCount >= this.options.maxUses) {

packages/pg-pool/test/events.js

+36
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,42 @@ describe('events', function () {
6060
}, 100)
6161
})
6262

63+
it('emits release every time a client is released', function (done) {
64+
const pool = new Pool()
65+
let releaseCount = 0
66+
pool.on('release', function (err, client) {
67+
expect(err instanceof Error).not.to.be(true)
68+
expect(client).to.be.ok()
69+
releaseCount++
70+
})
71+
for (let i = 0; i < 10; i++) {
72+
pool.connect(function (err, client, release) {
73+
if (err) return done(err)
74+
release()
75+
})
76+
pool.query('SELECT now()')
77+
}
78+
setTimeout(function () {
79+
expect(releaseCount).to.be(20)
80+
pool.end(done)
81+
}, 100)
82+
})
83+
84+
it('emits release with an error if client is released due to an error', function (done) {
85+
const pool = new Pool()
86+
pool.connect(function (err, client, release) {
87+
expect(err).to.equal(undefined)
88+
const releaseError = new Error('problem')
89+
pool.once('release', function (err, errClient) {
90+
console.log(err, errClient)
91+
expect(err).to.equal(releaseError)
92+
expect(errClient).to.equal(client)
93+
pool.end(done)
94+
})
95+
release(releaseError)
96+
})
97+
})
98+
6399
it('emits error and client if an idle client in the pool hits an error', function (done) {
64100
const pool = new Pool()
65101
pool.connect(function (err, client) {

0 commit comments

Comments
 (0)