pool.end() resolves before the last pool.query()
Hey - this is awesome, thank you! Sorry for the delay - I'm in the mountains in colorado until Monday so i'm a bit slow to respond. Will be a lot more avail when I get home...but thanks so much for fixing/improving this. been a long-standing little bug...nice to get it taken care of! ❤️
Hi! I should add some corrections though, now two other tests seem not passing so I will fix it
Hi! I should add some corrections though, now two other tests seem not passing so I will fix it
Howdy - looks like one of the tests for idle timeout still isn't passing - you still lookin' into that?
Hi! I should add some corrections though, now two other tests seem not passing so I will fix it
Howdy - looks like one of the tests for idle timeout still isn't passing - you still lookin' into that?
Yeah, I am trying to figure out what's wrong with that
I believe the idle timeout is failing due to a new data race caused by this fix. We now emit on remove when client ends:
const context = this
client.end(() => {
context.emit('remove', client)
...
})
but the client may not end right away. Our test releases both clients and immediately sets up an "on remove" listener called removal. The intention is for removal to handle the removes caused by the idle timeout. However, removal will now sometimes handle the remove from release.
Log:
clientB.release(new Error())is called by the test sourceremovalhandler is set up sourceclient.endis complete and now calls the callback sourceremovalhandle asserts that idle count is 0, but it is still 1 source
I am not sure of the exact fix at the moment, but I think we need a way to wait for client release to finish.
I am not sure of the exact fix at the moment, but I think we need a way to wait for client release to finish.
waiting will not work because we are trying to catch the remove event that will fix in 10ms after clientA.release() is called
the attempted fix of counting clients will not work consistently because the order in which clientA and clientB are removed is non-deterministic>
in https://github.com/brianc/node-postgres/pull/3461 i check for clientA in the on remove callback, which i believe is the original intent of this test.
@hjr3 Hi! Thanks for information, I will take a look