Skip to content
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

StackOverflowError in RedisPublisher #1140

Closed
csunwold opened this issue Sep 29, 2019 · 9 comments
Closed

StackOverflowError in RedisPublisher #1140

csunwold opened this issue Sep 29, 2019 · 9 comments
Labels
type: bug A general bug
Milestone

Comments

@csunwold
Copy link

Bug Report

Occasionally our application is getting a StackOverflowError and then is unable to process any further commands. I've used the CommandLatencyEvent to validate that no commands are being processed.

Current Behavior

Stack trace
level=WARN thread=lettuce-eventExecutorLoop-2-3 logger=
SingleThreadEventExecutor messageId= message="Unexpected exception from an
event executor: "
java.lang.StackOverflowError: null
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)
        at io.lettuce.core.RedisPublisher$State$3.read(RedisPublisher.java:
605)
        at io.lettuce.core.RedisPublisher$State$3.onDataAvailable(
RedisPublisher.java:571)
        at io.lettuce.core.RedisPublisher$RedisSubscription.onDataAvailable(
RedisPublisher.java:319)
        at io.lettuce.core.RedisPublisher$RedisSubscription.
checkOnDataAvailable(RedisPublisher.java:400)

Input Code

So far I can't consistently reproduce it. I have logs that are observing it happen in production but I haven't been able to capture the exact set of circumstances that lead to this behavior. If you have any suggestions for additional logging that I can add which would help narrow down the root cause I would be happy to do so. It happens often enough (about once every 3-4 hours) that I should be able to help validate any potential fix within about 24 hours of pushing to production.

Expected behavior/code

No StackOverflowError should occur, or the error should be caught by the onError handler of the Flux.

Environment

  • Lettuce version(s): 5.2.0
  • Redis version: 5.0.3 (Elasticache)

Possible Solution

None known at this time.

Additional context

  • Running on AWS Elasticache with 50 shards
  • Using the Reactive APIs
  • MGET is the only command we are executing, in many cases with more
    than 1500 keys per call.
  • I've tried to reproduce using the Lettuce's integration tests, but they always pass. I also debugged through the Publisher during execution of ReactiveStreamingOutputIntegrationTests and saw that these tests never hit the exact code path in my stack trace.
More information about when this began

The issue only began to occur after changing the structure of our keys. Previously our keys were structured like this:

p{id1:id2:id3:id4}
c{id1:id2:id3:id4}

This way all keys in space "p" and "c" would end up on the same keyslot. In practice this lead to a very even distribution of keys across the cluster. Now the keys are formatted like this:

p:id1{id2:id3:id4}
c:id1{id2:id3:id4}

This was done because most of the time we would execute an MGET call, all keys would have the same id2, id3, and id4 values but different id1. By changing the hash tag used it put these keys that would frequently be queried together in the same keyslot. This lead to a large decrease in total MGETs (because each MGET through the reactive API gets split into a new MGET per shard). This was observed by metrics collected with the CommandLatencyEvent. In theory this should mean that while the total number of commands sent over the network went down, the average number of keys sent to a single node at a time went up.

@csunwold csunwold added the type: bug A general bug label Sep 29, 2019
@mp911de mp911de added this to the 5.2.1 milestone Oct 16, 2019
@mp911de mp911de added the type: blocker An issue that is blocking us from releasing label Oct 16, 2019
@mp911de
Copy link
Collaborator

mp911de commented Oct 20, 2019

It looks like that the recursive implementation and the fact that data flows chunk by chunk cause the stack overflow. We need to change the implementation to avoid recursion and favor a drain loop instead.

mp911de added a commit that referenced this issue Oct 25, 2019
RedisSubscription.onDataAvailable(…) and RedisSubscription.read(…) now use a drain-loop instead of recursive reads for element emission.
Recursive emission is error prone if the response contains many response elements.

onDataAvailable(…) calls read(…) if there is demand and if data is available.
mp911de added a commit that referenced this issue Oct 25, 2019
Increase test loop count for race condition detection. Fix ScanIteratorIntegrationTests.
mp911de added a commit that referenced this issue Oct 25, 2019
RedisSubscription.onDataAvailable(…) and RedisSubscription.read(…) now use a drain-loop instead of recursive reads for element emission.
Recursive emission is error prone if the response contains many response elements.

onDataAvailable(…) calls read(…) if there is demand and if data is available.
mp911de added a commit that referenced this issue Oct 25, 2019
Increase test loop count for race condition detection. Fix ScanIteratorIntegrationTests.
@mp911de
Copy link
Collaborator

mp911de commented Oct 25, 2019

I pushed a fix to address the issue. Care to upgrade to 5.2.1.BUILD-SNAPSHOT and verify the fix?

@csunwold
Copy link
Author

Thanks @mp911de. I'll get it out and let you know in a few days if we don't see any occurrences of the issue running the new version.

@csunwold
Copy link
Author

@mp911de just to satisfy my own curiosity, were you able to replicate the same stackoverflow error with these Integration test changes: 9563067 ?

@mp911de
Copy link
Collaborator

mp911de commented Oct 25, 2019

No, I wasn’t able to reproduce a stack overflow. I mostly was concerned about not breaking existing usage patterns. It turned out that reproducing a race condition where processing gets stuck is incredibly hardy and therefore I raised the number of iterations to increase probability.

mp911de added a commit that referenced this issue Oct 28, 2019
onNext now uses decrement instead of compareAndSet to avoid races with request(n) calls ensuring that all elements get emitted.
This allows simplification of readAndPublish() and eliminating another race where completion was potentially dropped.

Completion now also considers the guard through READING instead of completing from any state to protect against active drain loops.
mp911de added a commit that referenced this issue Oct 28, 2019
onNext now uses decrement instead of compareAndSet to avoid races with request(n) calls ensuring that all elements get emitted.
This allows simplification of readAndPublish() and eliminating another race where completion was potentially dropped.

Completion now also considers the guard through READING instead of completing from any state to protect against active drain loops.
@mp911de mp911de removed the type: blocker An issue that is blocking us from releasing label Oct 30, 2019
@mp911de mp911de closed this as completed Oct 30, 2019
@CodeMyWorld
Copy link

CodeMyWorld commented Apr 28, 2020

@csunwold
After version up, did the same issue occur again? I encountered the same problem with version 5.2.0.

@csunwold
Copy link
Author

csunwold commented Apr 28, 2020 via email

@CodeMyWorld
Copy link

CodeMyWorld commented Apr 28, 2020

@csunwold
Thanks for your information. When the similar behavior you mentioned occurred, will the error level log be output? Since our monitoring systems only notify error level log, if the log level was warn, we cannot take action immediately. When this problem occurs, does app hang forever? Or only some requests fail, and the comming up reqeusts can be processed normally.

@csunwold
Copy link
Author

csunwold commented Apr 28, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug A general bug
Projects
None yet
Development

No branches or pull requests

3 participants