redis / lettuce

Advanced Java Redis client for thread-safe sync, async, and reactive usage. Supports Cluster, Sentinel, Pipelining, and codecs.

Home Page:https://lettuce.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Redis health check failed ConcurrentModificationException: null

FrankCy opened this issue · comments

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

Input Code

Input Code
    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

  • lettuce-core:5.1.7.RELEASE
  • spring-data-redis:2.1.9.RELEASE
  • spring-boot-starter-data-redis:2.1.6.RELEASE
  • jdk8

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?