You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Currently, withAddrRw always calls defer cn.condRelease(&err) with an err that is nil. This means no matter what error happens in fn, the connection will get sent back to the pool even if there is a non-resumable error. This isn't ideal because we could be sending bad connections back to the pool.
This PR matches the implementation with onItem that seems to handle the error correctly.
@bradfitz apologies for the ping, but do you believe change is necessary? I imagine the worst case is that withAddrRw may put bad connections back into the connection pool on non-recoverable errors.
In our private fork of gomemcache, we actually changed onItem to match withAddrRw's error handling since a linter recommended just returning the result of the passed in function instead of capturing it in the err variable first.
We did this but then we found that during network difficulties we would eventually see get requests failing with unexpected responses memcache: unexpected line in get response: "STORED\r\n", which indicates that connections from failed set calls were actually getting used and incorrectly read later for get requests. This happened infrequently for months and we reverted that linter suggestion and the errors went away completely.
It seems like withAddrRw would have the same exact issue, but we have never seen evidence of this happening in our logs. We patched this change in our fork just in case, but would love your opinion on it as well.
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
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.
Currently,
withAddrRwalways callsdefer cn.condRelease(&err)with an err that is nil. This means no matter what error happens infn, the connection will get sent back to the pool even if there is a non-resumable error. This isn't ideal because we could be sending bad connections back to the pool.This PR matches the implementation with
onItemthat seems to handle the error correctly.