Skip to content

Commit

Permalink
Emit a 'release' event when a connection is released back to the pool
Browse files Browse the repository at this point in the history
  • Loading branch information
nihonjinrxs committed Oct 17, 2022
1 parent 5538df6 commit 7cf4cbe
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 0 deletions.
2 changes: 2 additions & 0 deletions packages/pg-pool/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,8 @@ class Pool extends EventEmitter {

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

this.emit('release', err, client)

// TODO(bmc): expose a proper, public interface _queryable and _ending
if (err || this.ending || !client._queryable || client._ending || client._poolUseCount >= this.options.maxUses) {
if (client._poolUseCount >= this.options.maxUses) {
Expand Down
36 changes: 36 additions & 0 deletions packages/pg-pool/test/events.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,42 @@ describe('events', function () {
}, 100)
})

it('emits release every time a client is released', function (done) {
const pool = new Pool()
let releaseCount = 0
pool.on('release', function (err, client) {
expect(err instanceof Error).not.to.be(true)
expect(client).to.be.ok()
releaseCount++
})
for (let i = 0; i < 10; i++) {
pool.connect(function (err, client, release) {
if (err) return done(err)
release()
})
pool.query('SELECT now()')
}
setTimeout(function () {
expect(releaseCount).to.be(20)
pool.end(done)
}, 100)
})

it('emits release with an error if client is released due to an error', function (done) {
const pool = new Pool()
pool.connect(function (err, client, release) {
expect(err).to.equal(undefined)
const releaseError = new Error('problem')
release(releaseError)
pool.once('release', function (err, errClient) {
console.log(err, errClient)
expect(err).to.equal(releaseError)
expect(errClient).to.equal(client)
pool.end(done)
})
})
})

it('emits error and client if an idle client in the pool hits an error', function (done) {
const pool = new Pool()
pool.connect(function (err, client) {
Expand Down

0 comments on commit 7cf4cbe

Please sign in to comment.