bf: MD-989 try next sentinels after I/O timeout errors #12
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.
This fixes an issue that causes other sentinels not to be tried after one of them fails with an I/O timeout.
The root cause is that the code attempts to abort early if the error is of one of the types generated by the context module, in this case,
context.DeadlineExceeded
, but it doesn't check that the error comes from the context argument provided to the function. Since the network layer also uses context to manage timeouts, it returns the same type of error, which is mistakenly assumed as coming from the passed context.The fix consists of checking whether the
ctx
object passed to the function is in error state to abort early, and continue trying the next sentinels otherwise.The commit that introduced the early abortion on context error and caused this regression is:
redis/go-redis@63392a3