-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Split JedisClusterCommand into multiple methods #2355
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is more of a code suggestion. We'll almost always need a normal connection getter. Why not have one final defaultConnectionGetter created within constructor and use it everywhere else?
Inspired by redis#1334 where this went real easy :). Would have made redis#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>
Inspired by redis#1334 where this went real easy :). Would have made redis#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>
|
AFAWCT we have no outstanding tasks here and are awaiting review. So for clarity, do you think this is ready for review / merge @sazzad16, or are you expecting any more changes from our side? |
|
@walles According to community rule, we need approval of at least two collaborators. Let me see what I can do. |
|
@sazzad16 is there anything we can do to get this reviewed? Given that me and @jensgreen pair programmed this and you reviewed it, we are three people who approve of these changes so far. |
|
@walles I don't know anything else but asking the reviewers (which I've done). Please understand that they are doing it voluntarily, using their free time. |
|
@yangbodong22011 / @sazzad16, with @yangbodong22011's suggested change applied (good catch Yang!), do you think this is ready for merge? |
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.
Inspired by redis#1334 where this went real easy :). Would have made redis#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>
Co-authored-by: Yang Bodong <[email protected]>
0ad0b4f to
4f138e4
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, just suggesting a minor enhancement there but not a blocker for me.
Co-authored-by: Mina Asham <[email protected]>
31df601 to
4f80d73
Compare
Source (all of these point to the same place): * walles/retries-split * 4f80d73 * redis#2355
* 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 <[email protected]> * 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 <[email protected]> Co-authored-by: Jens Green Olander <[email protected]> Co-authored-by: Jens Green Olander <[email protected]>
No behavior changes, just a refactoring.
Changes:
forloopI did try to keep the order of the new methods the same order as the previous
catchblocks.Note that
tryWithRandomNodeis gone, it was nevertrueso it and its code didn't survive the refactoring.I think redirection handling looks a bit strange, but it didn't change from before. If it is wrong then that should be fixed in another PR, this one is just a refactoring.
Reviewer notes
The
git diffisn't great for this change.If you want to see what changed it's probably easier to bring the old and the new code up side by side and compare that way instead.
Here's the old version for reference: https://github.com/redis/jedis/blob/master/src/main/java/redis/clients/jedis/JedisClusterCommand.java