Change MySQL liveness function to check for EOF #5947
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Inspired by https://github.blog/2020-05-20-three-bugs-in-the-go-mysql-driver/, this PR proposes changing the
check_liveness
function inpdo_mysql
from an active "ping" to a non-blocking read viaphp_stream_eof
when usingmysqlnd
.The end result is the same, and it eliminates the overhead and latency of sending a MySQL command. A trade-off, however, is that the ping command would reset MySQL's
wait_timeout
, whereas this implementation does not. I believe there is precedent for my change from other drivers - if I understand correctly, pdo_pgsql operates this way - but I would be open to adding an explicitPDO::ping
method for people that may still want that behavior for drivers that support it.I wasn't entirely sure if implementing the underlying
mysqlnd
functionality solely as a macro was appropriate (although it seems simple enough), so feel free to point me at the right place to put it if necessary.