Raise NetworkError and reconnect when multi_response_nonblock is unexpectedly called #783
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.
When an elasticache node is rebooted, it seems to send invalid response headers that cause dalli to think that the multiget response has completed, when there is actually still data queued up in the socket.
This causes dalli to raise
RuntimeError, "multi_response has completed"
, which is acceptable behavior. However, the problem is that the data queued up in the socket then leaks into subsequent responses.It is unclear if this is an elasticache-specific bug. This may be related to the issue reported in #390.
To work around this issue, raise NetworkError and reconnect whenever we run into this state. The multiget response will be incomplete but it seems like this is being addressed in #754.
Other possible solutions:
down!
- this also works, but may cause the server to be marked as down for a longer time than necessary.