-
Notifications
You must be signed in to change notification settings - Fork 3.9k
Fix:JedisCluster throws NullPointerException when maxAttempts is set to 0 #4186
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
… to 0 This change adds input validation to the RetryableCommandExecutor constructor to prevent usage with invalid configuration values, specifically when maxAttempts is set to 0. Previously, setting maxAttempts to 0 in JedisCluster would result in a NullPointerException during command execution, due to lastException being uninitialized when no attempt is made. With this fix, an IllegalArgumentException is thrown early if maxAttempts < 1, providing clearer feedback to the user and preventing runtime errors. Added unit tests to verify the validation behavior. Fixes redis#4185
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.
Pull Request Overview
This PR adds input validation to prevent invalid configurations in retryable and cluster command executors and ensures unsupported usages fail fast. It introduces a shared assertion utility and expands test coverage for retry behavior.
- Introduce
JedisAsserts
for argument checks - Add null and range checks in
RetryableCommandExecutor
andClusterCommandExecutor
constructors - Add unit tests covering constructor validation and retry logic for
RetryableCommandExecutor
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
File | Description |
---|---|
src/main/java/redis/clients/jedis/util/JedisAsserts.java | New assertion utility for argument validation |
src/main/java/redis/clients/jedis/executors/RetryableCommandExecutor.java | Constructor validations and suppressed-exception logic update |
src/main/java/redis/clients/jedis/executors/ClusterCommandExecutor.java | Parallel validations and suppressed-exception logic in cluster executor |
src/test/java/redis/clients/jedis/executors/RetryableCommandExecutorTest.java | Tests for constructor validation and retry behavior |
Comments suppressed due to low confidence (3)
src/main/java/redis/clients/jedis/util/JedisAsserts.java:29
- The Javadoc for isTrue incorrectly references null elements in an object array. Update it to state that an IllegalArgumentException is thrown when the boolean value is false.
* @throws IllegalArgumentException if the object array contains a {@code null} element
src/main/java/redis/clients/jedis/executors/RetryableCommandExecutor.java:30
- There is no unit test verifying that passing a null maxTotalRetriesDuration throws an IllegalArgumentException. Add a test case for this scenario in RetryableCommandExecutorTest.
JedisAsserts.notNull(maxTotalRetriesDuration, "maxTotalRetriesDuration must not be null");
src/main/java/redis/clients/jedis/executors/ClusterCommandExecutor.java:34
- Constructor input validation in ClusterCommandExecutor isn't covered by tests. Add unit tests for null provider, invalid maxAttempts, and null maxTotalRetriesDuration.
JedisAsserts.notNull(maxTotalRetriesDuration, "maxTotalRetriesDuration must not be null");
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.
| Package | Type | Package file | Manager | Update | Change | |---|---|---|---|---|---| | [redis.clients:jedis](https://github.com/redis/jedis) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `6.0.0` -> `6.1.0` | | [com.google.api.grpc:proto-google-common-protos](https://github.com/googleapis/sdk-platform-java) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.59.2` -> `2.60.0` | | [com.google.cloud:google-cloud-core-http](https://github.com/googleapis/sdk-platform-java) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.58.2` -> `2.59.0` | | [com.google.cloud:google-cloud-core](https://github.com/googleapis/sdk-platform-java) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.58.2` -> `2.59.0` | | [com.google.api:gax](https://github.com/googleapis/sdk-platform-java) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `2.68.2` -> `2.69.0` | | [com.squareup.wire](https://github.com/square/wire) | plugin | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.squareup.wire:wire-schema](https://github.com/square/wire) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.squareup.wire:wire-runtime](https://github.com/square/wire) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.squareup.wire:wire-reflector](https://github.com/square/wire) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.squareup.wire:wire-moshi-adapter](https://github.com/square/wire) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.squareup.wire:wire-grpc-client](https://github.com/square/wire) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.squareup.wire:wire-bom](https://github.com/square/wire) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `5.3.5` -> `5.3.6` | | [com.datadoghq:dd-trace-api](https://github.com/datadog/dd-trace-java) | dependencies | misk/gradle/libs.versions.toml | gradle | minor | `1.51.2` -> `1.52.0` | | [software.amazon.awssdk:sdk-core](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:sqs](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:regions](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:dynamodb-enhanced](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:dynamodb](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:aws-core](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:bom](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | | [software.amazon.awssdk:auth](https://aws.amazon.com/sdkforjava) | dependencies | misk/gradle/libs.versions.toml | gradle | patch | `2.32.14` -> `2.32.15` | --- ### Release Notes <details> <summary>redis/jedis (redis.clients:jedis)</summary> ### [`v6.1.0`](https://github.com/redis/jedis/releases/tag/v6.1.0): 6.1.0 ### Changes #### 🚀 New Features - Add support for SVS-VAMANA vector indexing ([#​4222](redis/jedis#4222)) - Clarify why new stream entries aren't deleted with XDELEX ([#​4218](redis/jedis#4218)) - Add support for new stream commands ([#​4211](redis/jedis#4211)) - Add Support for New BITOP Operations in Redis 8.2 ([#​4188](redis/jedis#4188)) ([#​4190](redis/jedis#4190)) - Add binary stream support for XREAD and XREADGROUP ([#​3566](redis/jedis#3566)) ([#​4152](redis/jedis#4152)) - Run pipeline in current thread if all the keys on same node ([#​4149](redis/jedis#4149)) #### 🐛 Bug Fixes - Restore binary compatibility of SetParams ([#​4225](redis/jedis#4225)) - Fix memory leak in JedisClusterInfoCache - replica nodes not cleared ([#​4205](redis/jedis#4205)) - Fix:JedisCluster throws NullPointerException when maxAttempts is set to 0 ([#​4186](redis/jedis#4186)) #### 🧰 Maintenance - DOC-5471 time series doc examples ([#​4210](redis/jedis#4210)) - Bump jackson.version from 2.19.1 to 2.19.2 ([#​4208](redis/jedis#4208)) - Fix flaky test ClientCommandsTest.killSkipmeYesNo ([#​4206](redis/jedis#4206)) - Bump org.junit:junit-bom from 5.13.2 to 5.13.3 ([#​4198](redis/jedis#4198)) - Migrate publishing to Maven Central Portal ([#​4199](redis/jedis#4199)) - Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.7 to 3.2.8 ([#​4197](redis/jedis#4197)) - Bump org.junit:junit-bom from 5.13.1 to 5.13.2 ([#​4192](redis/jedis#4192)) - DOC-5227 added probabilistic data type examples ([#​4184](redis/jedis#4184)) - Bump jackson.version from 2.19.0 to 2.19.1 ([#​4180](redis/jedis#4180)) - Update test infra to use latest Redis ([#​4179](redis/jedis#4179)) - Bump org.junit:junit-bom from 5.13.0-RC1 to 5.13.1 ([#​4174](redis/jedis#4174)) - Bump org.json:json from [`2025010`](redis/jedis@20250107) to [`2025051`](redis/jedis@20250517) ([#​4171](redis/jedis#4171)) - Bump org.apache.httpcomponents.client5:httpclient5-fluent from 5.4.4 to 5.5 ([#​4170](redis/jedis#4170)) - Fix flaky tests in DocumentTest ([#​3617](redis/jedis#3617)) - Add retryable command execution example ([#​3780](redis/jedis#3780)) - Bump jackson.version from 2.18.3 to 2.19.0 ([#​4160](redis/jedis#4160)) - Bump com.google.code.gson:gson from 2.12.1 to 2.13.1 ([#​4161](redis/jedis#4161)) #### Contributors We'd like to thank all the contributors who worked on this release! [@​219sansim](https://github.com/219sansim), [@​YoHanKi](https://github.com/YoHanKi), [@​andy-stark-redis](https://github.com/andy-stark-redis), [@​ggivo](https://github.com/ggivo), [@​jujn](https://github.com/jujn), [@​thachlp](https://github.com/thachlp), [@​uglide](https://github.com/uglide) and [@​xrayw](https://github.com/xrayw) </details> <details> <summary>googleapis/sdk-platform-java (com.google.api.grpc:proto-google-common-protos)</summary> ### [`v2.60.0`](https://github.com/googleapis/sdk-platform-java/blob/HEAD/CHANGELOG.md#2600-2025-06-23) ##### Features - handle auto pagination for BigQuery v2 ([#​3829](googleapis/sdk-platform-java#3829)) ([025c84c](googleapis/sdk-platform-java@025c84c)) ##### Dependencies - update google auth library dependencies to v1.37.1 ([#​3846](googleapis/sdk-platform-java#3846)) ([ea1d9e5](googleapis/sdk-platform-java@ea1d9e5)) - update google http client dependencies to v1.47.1 ([#​3848](googleapis/sdk-platform-java#3848)) ([a9a39d7](googleapis/sdk-platform-java@a9a39d7)) </details> <details> <summary>square/wire (com.squareup.wire)</summary> ### [`v5.3.6`](https://github.com/square/wire/blob/HEAD/CHANGELOG.md#Version-536) [Compare Source](square/wire@5.3.5...5.3.6) *2025-08-05* ##### CLI - New CLI option `--ignore_unused_roots_and_prunes` ([#​3354](square/wire#3354)) ##### JVM - Fix: Handle negative hexadecimal in default values ([#​3355](square/wire#3355)) - Optimization: Avoid copying of repeated and map types when mutableTypes are being used ([#​3352](square/wire#3352) by \[Rahul Ravikumar]\[tikurahul]) ##### Swift - Fix: Properly disambiguate OneOf enum if it has the same name as enclosing type ([#​3350](square/wire#3350) by \[Dimitris Koutsogiorgas]\[dnkoutso]) </details> <details> <summary>datadog/dd-trace-java (com.datadoghq:dd-trace-api)</summary> ### [`v1.52.0`](https://github.com/DataDog/dd-trace-java/releases/tag/v1.52.0): 1.52.0 ### Components #### Application Security Management (WAF) - ✨ Only report ASM\_DD, ASM\_DATA and ASM capabilities when AppSec is enabled ([#​9260](DataDog/dd-trace-java#9260) - [@​manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez)) - 🐛 Fix NPE in AppSecConfigServiceImpl ([#​9165](DataDog/dd-trace-java#9165) - [@​manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez)) - 🐛 Fix AppSec play.mvc.StatusHeader instrumentation for play 2.6 ([#​9160](DataDog/dd-trace-java#9160) - [@​manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez)) #### Build & Tooling - ✨📖 Automatically register crashtracking via native extensions ([#​8851](DataDog/dd-trace-java#8851) - [@​MattAlp](https://github.com/MattAlp)) #### Configuration at Runtime - ✨ Create activation origin config for telemetry ([#​9064](DataDog/dd-trace-java#9064) - [@​sezen-datadog](https://github.com/sezen-datadog)) #### Continuous Integration Visibility - ✨ Update GitLab provided tags ([#​9275](DataDog/dd-trace-java#9275) - [@​daniel-mohedano](https://github.com/daniel-mohedano)) - 🐛 Fix base branch SHA usage in GitHub Actions ([#​9257](DataDog/dd-trace-java#9257) - [@​daniel-mohedano](https://github.com/daniel-mohedano)) - ✨ Add `ci.job.id` tag ([#​9256](DataDog/dd-trace-java#9256) - [@​daniel-mohedano](https://github.com/daniel-mohedano)) - ✨ Add new org to Weaver instrumentation ([#​9235](DataDog/dd-trace-java#9235) - [@​daniel-mohedano](https://github.com/daniel-mohedano) - thanks for the contribution!) - ✨ Improve Git commit info building ([#​9210](DataDog/dd-trace-java#9210) - [@​daniel-mohedano](https://github.com/daniel-mohedano)) - ✨ Update Attempt to Fix to v5 ([#​9145](DataDog/dd-trace-java#9145) - [@​daniel-mohedano](https://github.com/daniel-mohedano)) #### Crash tracking - ✨📖 Automatically register crashtracking via native extensions ([#​8851](DataDog/dd-trace-java#8851) - [@​MattAlp](https://github.com/MattAlp)) #### Data Streams Monitoring - ✨ Reduce DSM CPU overheard ([#​9151](DataDog/dd-trace-java#9151) - [@​kr-igor](https://github.com/kr-igor)) - ✨⚡ DSM optimizations for high throughput scenarios ([#​9137](DataDog/dd-trace-java#9137) - [@​kr-igor](https://github.com/kr-igor)) #### Database Monitoring - 🐛 Fix duplicate trace injection for SQL Server and Oracle DBM full propagation mode ([#​9224](DataDog/dd-trace-java#9224) - [@​lu-zhengda](https://github.com/lu-zhengda)) #### Dynamic Instrumentation - 🐛 Add URI in string primitives ([#​9285](DataDog/dd-trace-java#9285) - [@​jpbempel](https://github.com/jpbempel)) - ✨ Increase SourceFile tracking max queue size ([#​9271](DataDog/dd-trace-java#9271) - [@​jpbempel](https://github.com/jpbempel)) - ✨ Add capping on SourceFile tracking queue ([#​9245](DataDog/dd-trace-java#9245) - [@​jpbempel](https://github.com/jpbempel)) - ✨ Add third-party filtering in SourceFile tracking ([#​9205](DataDog/dd-trace-java#9205) - [@​jpbempel](https://github.com/jpbempel)) #### ML Observability (LLMObs) - ✨ Add methods to capture embedding and retrieval spans ([#​9297](DataDog/dd-trace-java#9297) - [@​nayeem-kamal](https://github.com/nayeem-kamal)) #### Metrics - ✨ Change primary client stats configuration key ([#​9196](DataDog/dd-trace-java#9196) - [@​amarziali](https://github.com/amarziali)) - ✨ Calculate client stats also if the span kind is eligible ([#​9157](DataDog/dd-trace-java#9157) - [@​amarziali](https://github.com/amarziali)) - ✨ Backpropagate peer tags ([#​9144](DataDog/dd-trace-java#9144) - [@​bric3](https://github.com/bric3)) - 🐛 Make client stats reliable in case of downgrade ([#​9136](DataDog/dd-trace-java#9136) - [@​amarziali](https://github.com/amarziali)) #### Platform components - 🐛 Fix VM options parsing from /proc/fs ([#​9255](DataDog/dd-trace-java#9255) - [@​PerfectSlayer](https://github.com/PerfectSlayer)) #### Profiling - ✨ Switch profile compression to zstd default ([#​9293](DataDog/dd-trace-java#9293) - [@​jbachorik](https://github.com/jbachorik)) - ✨ Bump ddprof to 1.29.0 ([#​9262](DataDog/dd-trace-java#9262) - [@​zhengyu123](https://github.com/zhengyu123)) - Potential memory leak and race with the JVMTI wallclock sampler by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#234 - Downport async-profiler no-allocation changes by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#245 - Adopt openjdk safefetch by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#246 - Safe fetch 64-bit value and pointer by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#247 - Rebase on Async-Profiler 4.1 by [@​jbachorik](https://github.com/jbachorik) in DataDog/java-profiler#252 - Patch upstream stackWalker.cpp not to fail on unaligned access by [@​jbachorik](https://github.com/jbachorik) in DataDog/java-profiler#218 - Remap thread id to avoid bitmap contention by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#229 - Improve performance using Unsafe to activate/deactivate thread filter by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#230 - Unify context propagation by [@​zhengyu123](https://github.com/zhengyu123) in DataDog/java-profiler#231 - 🐛 Fix the profiler stackdepth setting propagation in recent (22+) Java versions ([#​9130](DataDog/dd-trace-java#9130) - [@​jbachorik](https://github.com/jbachorik)) #### Realtime User Monitoring - ✨ Wrap servlet original PrintWriter on rum injector ([#​9146](DataDog/dd-trace-java#9146) - [@​amarziali](https://github.com/amarziali)) #### Telemetry - ✨ Create activation origin config for telemetry ([#​9064](DataDog/dd-trace-java#9064) - [@​sezen-datadog](https://github.com/sezen-datadog)) #### Tracer core - ✨⚡ Reduce span construction overhead by switching to optimized TagMap ([#​8589](DataDog/dd-trace-java#8589) - [@​dougqh](https://github.com/dougqh)) - 🐛 Match Hands Off Config selectors on process\_arguments value ([#​9201](DataDog/dd-trace-java#9201) - [@​paullegranddc](https://github.com/paullegranddc)) - ✨ Move JSON generation to sender thread to improve startup time. ([#​9197](DataDog/dd-trace-java#9197) - [@​AlexeyKuznetsov-DD](https://github.com/AlexeyKuznetsov-DD)) - ✨ Improve agent to avoid loading global config on main thread ([#​9190](DataDog/dd-trace-java#9190) - [@​PerfectSlayer](https://github.com/PerfectSlayer)) - ✨ add injection metadata fields to telemetry forwarder ([#​9185](DataDog/dd-trace-java#9185) - [@​sydney-tung](https://github.com/sydney-tung)) - 🐛 Avoid race conditions on feature discovery during Writer creation ([#​9173](DataDog/dd-trace-java#9173) - [@​daniel-mohedano](https://github.com/daniel-mohedano)) - ✨ Surface potential root cause when agent initialization errors ([#​9170](DataDog/dd-trace-java#9170) - [@​AlexeyKuznetsov-DD](https://github.com/AlexeyKuznetsov-DD)) - 💡 Support adding W3C baggage as span tags ([#​9169](DataDog/dd-trace-java#9169) - [@​rachelyangdog](https://github.com/rachelyangdog)) - ✨⚡ Align our default classloader excludes with OTel ([#​9161](DataDog/dd-trace-java#9161) - [@​mcculls](https://github.com/mcculls)) - ✨ Backpropagate container tags hash coming from the info endpoint ([#​9156](DataDog/dd-trace-java#9156) - [@​amarziali](https://github.com/amarziali)) - 🐛 Avoid race conditions and multiple agent discovery feature states ([#​9135](DataDog/dd-trace-java#9135) - [@​amarziali](https://github.com/amarziali)) ### Instrumentations #### AWS SDK instrumentation - ✨ Enhance Service Representation for Serverless ([#​9203](DataDog/dd-trace-java#9203) - [@​zarirhamza](https://github.com/zarirhamza)) #### gRPC instrumentation - 🐛 Add check to prevent injection of repeated GRPC headers ([#​9246](DataDog/dd-trace-java#9246) - [@​mhlidd](https://github.com/mhlidd)) #### JDBC instrumentation - 🐛 Fix duplicate trace injection for SQL Server and Oracle DBM full propagation mode ([#​9224](DataDog/dd-trace-java#9224) - [@​lu-zhengda](https://github.com/lu-zhengda)) #### Play Framework instrumentation - 🐛 Fix AppSec play.mvc.StatusHeader instrumentation for play 2.6 ([#​9160](DataDog/dd-trace-java#9160) - [@​manuel-alvarez-alvarez](https://github.com/manuel-alvarez-alvarez)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - "after 6pm every weekday,before 2am every weekday" in timezone Australia/Melbourne, Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Never, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). GitOrigin-RevId: 9da36329ffa552291a640381780b608ef6513e29
This change adds input validation to the RetryableCommandExecutor constructor to prevent usage with invalid configuration values, specifically when maxAttempts is set to 0.
Previously, setting maxAttempts to 0 in JedisCluster would result in a
NullPointerException
during command execution, due tolastException
being uninitialized when no attempt is made. With this fix, anIllegalArgumentException
is thrown early ifmaxAttempts < 1
, providing feedback to the user.Added unit tests to verify the validation behavior.
Co-authored-by: shivincible [email protected]
Fixes #4185