redis / lettuce

Advanced Java Redis client for thread-safe sync, async, and reactive usage. Supports Cluster, Sentinel, Pipelining, and codecs.
https://lettuce.io
MIT License
5.3k stars 949 forks source link

Redis health check failed ConcurrentModificationException: null #2826

Closed FrankCy closed 2 months ago

FrankCy commented 2 months ago

Bug Report

[http-nio-11943-exec-2] [] Redis health check failed java.util.ConcurrentModificationException: null at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909) ~[?:1.8.0_221] at java.util.ArrayList$Itr.next(ArrayList.java:859) ~[?:1.8.0_221] at org.springframework.data.redis.connection.lettuce.LettuceConverters$1.convert(LettuceConverters.java:226) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.data.redis.connection.lettuce.LettuceConverters$1.convert(LettuceConverters.java:217) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.data.redis.connection.lettuce.LettuceConverters.partitionsToClusterNodes(LettuceConverters.java:716) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.data.redis.connection.lettuce.LettuceClusterTopologyProvider.getTopology(LettuceClusterTopologyProvider.java:53) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.data.redis.connection.ClusterCommandExecutor.getClusterTopology(ClusterCommandExecutor.java:332) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.data.redis.connection.ClusterCommandExecutor.executeCommandOnArbitraryNode(ClusterCommandExecutor.java:110) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.data.redis.connection.lettuce.LettuceClusterConnection.clusterGetClusterInfo(LettuceClusterConnection.java:351) ~[spring-data-redis-2.1.5.RELEASE.jar!/:2.1.5.RELEASE] at org.springframework.boot.actuate.redis.RedisHealthIndicator.doHealthCheck(RedisHealthIndicator.java:58) ~[spring-boot-actuator-2.1.6.RELEASE.jar!/:2.1.6.RELEASE]

Current Behavior

Configured LettuceClientConfiguration and set topology refresh, but in high concurrency scenarios, occasionally prompts this error, would like to help analyse the cause, thanks.

Stack trace ```java ```

Input Code

Input Code ```java public LettuceClientConfiguration clientConfiguration(ClientResources clientResources,GenericObjectPoolConfig genericObjectPoolConfig) { ClusterTopologyRefreshOptions topologyRefreshOptions= ClusterTopologyRefreshOptions.builder() .enablePeriodicRefresh(Duration.ofSeconds(period)) .enableAllAdaptiveRefreshTriggers().build(); ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder() .timeoutOptions(TimeoutOptions.enabled(Duration.ofSeconds(period))) .topologyRefreshOptions(topologyRefreshOptions) .build(); LettuceClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder() .commandTimeout(Duration.ofSeconds(timeout)) .clientResources(clientResources) .clientOptions(clusterClientOptions) .poolConfig(genericObjectPoolConfig) .build(); return lettuceClientConfiguration; } ```

Expected behavior/code

Environment

tishun commented 2 months ago

Hey @FrankCy, from the stacktrace I can only assume you are having issue with the Spring Data Redis and not the Lettuce drive itself? Perhaps this issue would be better suited there?