neo4j / neo4j-javascript-driver

Neo4j Bolt driver for JavaScript
https://neo4j.com/docs/javascript-manual/current/
Apache License 2.0
839 stars 148 forks source link

Don't prevent NodeJS from closing to run acquisition timeout error #1196

Closed CarsonF closed 1 month ago

CarsonF commented 1 month ago

Currently my node process will wait 60 seconds (I know it's configurable) to close because this timeout is waiting to fire a timeout error. This stops referencing counting this callback, so it won't prevent the process from closing. This will still process if there are other executions in the event loop, so all this affects if node is waiting on a timeout that will never be needed.


Digging more into this the wait time happens because the socket never emits the logon success. 60% of the time I see

C: LOGON { ... }

But no bytes are ever read / the data event is never fired. This just "hangs" waiting for logon response, until the timeout is fired. I'm not sure why this happens. I haven't indicated to node in any way of my intention to close the process. Yet somehow I suspect it is aware of this.

The other 40% the logon / connection init process works fine:

C: LOGON { ... }
NodeChannel._conn.data <Buffer 00 56 b1 70 a3 86 73 65 72 76 65 72 8c 4e 65 6f 34 6a 2f 35 2e 32 30 2e 30 8d 63 6f 6e 6e 65 63 74 69 6f 6e 5f 69 64 87 62 6f 6c 74 2d 32 37 85 68 69 ... 47 more bytes>
S: SUCCESS {"signature":112,"fields":[{"server":"Neo4j/5.20.0","connection_id":"bolt-27","hints":{"connection.recv_timeout_seconds":{"low":120,"high":0}}}]}

In these cases the process cleans up rapidly.

bigmontz commented 1 month ago

Hej @CarsonF, there is some errors in the pipelines which I will need to investigate.

Could you share the Node version you used?

CarsonF commented 1 month ago

v22.0.0

bigmontz commented 1 month ago

Thanks for your contribution, @CarsonF. The changes will be released in the version 5.22.0 of the driver.