Several cluster fixes based on open ioredis PRs #4
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.
Change
Implements fixes from these PRs:
retryStrategy
for connection error redis/ioredis#1855Problem / Why
First fix:
When changing the instance type of a MemoryDB cluster, an in-place upgrade happens where new nodes are deployed with the same hostnames as the old ones. The old ones start returning MOVED to all queries, and after a while they are removed. The way ioredis reacts to this is it ends up in a loop of retrying commands and receiving MOVED. This loop is only broken once the old nodes are removed and the individual connections time out.
Second fix:
currently, cluster's "subscriber" check is done on "condition/preCondition" object level. But "condition.subscriber" property may be a boolean, not an object. So if "subscriber" as an object exists only on "prevCondition", we will never get there. This fix makes sure we pick the first available subscriber object (if any). This might be useful for us as AFAIK "bull" uses subscriptions when dealing with queues.
Third fix:
Currently
ioredis
doesn't utilize retryStrategy for connection event, so if connection to AWS is throttled due to high amount of calls (e.g. from Bull),ioredis
doesn't retry to connect like with other failed events. This PR fixed it.