Drop inactive Redis connections from the free pool - #7253
Open
HarshDevelops wants to merge 1 commit into
Open
Conversation
ConnectionsHolder re-queued free-pool entries whose Netty channel was inactive but RedisConnection.closed was still false (for example after PingConnectionHandler closed the channel without closeAsync). Those entries could be borrowed again and surface as write timeouts. Drop inactive connections from the free pool and mark them closed on PING timeout so they cannot be reused. Fixes redisson#7236 Signed-off-by: Harsh Srivastava <harsh10822@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Fixes #7236
What was wrong
When a Netty channel was closed without RedisConnection.closeAsync() (for example after a PING timeout), RedisConnection.closed stayed false while isActive() became false. ConnectionsHolder still put those entries back into the free pool. They could be borrowed again, and later writes failed with write timeouts.
What changed
ConnectionsHolder now discards inactive free-pool entries and marks them closed instead of re-queueing them. PingConnectionHandler closes the RedisConnection (not only the channel) on PING timeout so the closed flag is set.
Testing