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.
COPY commands handling had a bug that manifests with high pool contention or very show idle_timeouts.
When copying data from client to a server, you first send a
COPY
query. Something likeYou get back a
CopyInResponse (G)
message from the server. Client is then expected to send zero or moreCopyData (d)
messages to the server and end withCopyComplete (c)
orCopyFailed (f)
messages.In transaction mode, PgCat allows the server connection to be released back into the pool after it gets
G
message from the server. In high contention situations or with very short idle timeout, the client's attempt to checkout another connection results in the client sendingCopyData
packets to a server connection that is not in copy mode.This PR fixes this bug by keeping track of
copy_mode
and avoiding the release of the connection back into the pool if it is incopy_mode
.