-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Retry with backoff on cluster connection failures (#2358)
* Split JedisClusterCommand into multiple methods No behavior changes, just a refactoring. Changes: * Replaces recursion with a for loop * Extract redirection handling into its own method * Extract connection-failed handling into its own method Note that `tryWithRandomNode` is gone, it was never `true` so it and its code didn't survive the refactoring. * Drop redundant null check * Bump JDK version to 1.8 Inspired by #1334 where this went real easy :). Would have made #2355 shorter. Free public updates for JDK 7 ended in 2015: <https://en.wikipedia.org/wiki/Java_version_history> For JDK 8, free public support is available from non-Orace vendors until at least 2026 according to the same table. And JDK 8 is what Jedis is being tested on anyway: <https://github.com/redis/jedis/blob/ac0969315655180c09b8139c16bded09c068d498/.circleci/config.yml#L67-L74> * Replace ConnectionGetters with lambdas * Retrigger CI * Add backoff to Redis connections * Add unit tests for backoff logic * Add retries logging * Always use the user requested timeout * Remedy review feedback * Consider connection exceptions and disregard random nodes * consider connection exceptions and disregard random nodes * reset redirection * Revert "Consider connection exceptions and disregard random nodes" This reverts commit 67a062a. Lots of tests in JedisClusterCommandTests started failing, need to be fixed before trying again. * Add another backoff test case 1. We try to contact master => JedisConnectionException 2. We try to contact replica => It refers us to master, hasn't failed over yet 3. We try to contact master => JedisConnectionException 4. We try to contact replica => Success, because it has now failed over * consider connection exceptions and disregard random nodes * reset redirection * Fix test failure * Apply suggestions from code review Co-authored-by: Jens Green Olander <jensgreen@users.noreply.github.com> * update documentation * Improve a comment * Update src/main/java/redis/clients/jedis/DefaultJedisSocketFactory.java * Add change from another branch Source (all of these point to the same place): * walles/retries-split * 4f80d73 * #2355 * Move JedisClusterCommandTest out of commands package * Use JedisClusterOperationException * Reduce sleep time, especially when few attempts left * Update src/main/java/redis/clients/jedis/JedisClusterCommand.java * merge fix * merge fix * Use maxAttempts * format import * Re-add missing codes due to merge * avoid NPE while zero max attempts * Remove zero attempts test * More cluster constructors and customizability * Use maxTotalRetriesDuration everywhere * more missing maxTotalRetriesDuration after merge Co-authored-by: M Sazzadul Hoque <7600764+sazzad16@users.noreply.github.com> Co-authored-by: Jens Green Olander <jgreen@spotify.com> Co-authored-by: Jens Green Olander <jensgreen@users.noreply.github.com>
- Loading branch information
1 parent
71dac36
commit 270bb71
Showing
9 changed files
with
1,055 additions
and
526 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
557 changes: 298 additions & 259 deletions
557
src/main/java/redis/clients/jedis/BinaryJedisCluster.java
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains 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
This file contains 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
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains 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
Oops, something went wrong.