Skip to content

ReactiveRedisSessionRepository.RedisSession#saveChangeSessionId fails with "ERR no such key" if the session has been deleted concurrently. #2281

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

Closed
harsel opened this issue Mar 23, 2023 · 0 comments
Assignees
Labels
Milestone

Comments

@harsel
Copy link

harsel commented Mar 23, 2023

Describe the bug
ReactiveRedisSessionRepository.RedisSession#saveChangeSessionId might fail with "ERR no such key" if the session has been deleted concurrently. The issue has been fixed in the non reactive part in issue #1137. It is not fixed in ReactiveRedisSessionRepository. I assume it happens much less frequently there, as it checks if the key exists before doing the rename, but if the key is deleted in between those operations, it fails.

To Reproduce
Use ReactiveRedisSessionRepository, logout concurrently.
Logout of a session stored in
Hard to test as ReactiveRedisSessionRepository#save checks if the key exists, so the issue only happens when deletion is done concurrently.

Expected behavior
"ERR no such key" should be ignored when renaming a session.

Here is the Exception we frequently see. We use spring-data-redis 2.7.8

org.springframework.data.redis.RedisSystemException: Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: ERR no such key
	at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:54)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.FluxLift] :
	reactor.core.publisher.Flux.onErrorMap
	org.springframework.data.redis.connection.lettuce.LettuceReactiveRedisConnection.execute(LettuceReactiveRedisConnection.java:224)
Error has been observed at the following site(s):
	*_________Flux.onErrorMap ⇢ at org.springframework.data.redis.connection.lettuce.LettuceReactiveRedisConnection.execute(LettuceReactiveRedisConnection.java:224)
	|_                        ⇢ at org.springframework.data.redis.connection.lettuce.LettuceReactiveKeyCommands.rename(LettuceReactiveKeyCommands.java:174)
	|_              Flux.next ⇢ at org.springframework.data.redis.connection.ReactiveKeyCommands.rename(ReactiveKeyCommands.java:381)
	|_               Mono.map ⇢ at org.springframework.data.redis.connection.ReactiveKeyCommands.rename(ReactiveKeyCommands.java:381)
	*__________Flux.usingWhen ⇢ at org.springframework.data.redis.core.ReactiveRedisTemplate.doInConnection(ReactiveRedisTemplate.java:242)
	|_              Mono.from ⇢ at org.springframework.data.redis.core.ReactiveRedisTemplate.doCreateMono(ReactiveRedisTemplate.java:220)
	|_                        ⇢ at org.springframework.data.redis.core.ReactiveRedisTemplate.rename(ReactiveRedisTemplate.java:396)
	*________________Mono.and ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository$RedisSession.saveChangeSessionId(ReactiveRedisSessionRepository.java:313)
	*_______________Mono.then ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository$RedisSession.lambda$save$2(ReactiveRedisSessionRepository.java:267)
	|_       Mono.doOnSuccess ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository$RedisSession.lambda$save$2(ReactiveRedisSessionRepository.java:267)
	*______________Mono.defer ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository$RedisSession.save(ReactiveRedisSessionRepository.java:267)
	|_                        ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository$RedisSession.access$100(ReactiveRedisSessionRepository.java:167)
	*____________Mono.flatMap ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository.save(ReactiveRedisSessionRepository.java:127)
	|_                        ⇢ at org.springframework.session.data.redis.ReactiveRedisSessionRepository.save(ReactiveRedisSessionRepository.java:43)
	|_                        ⇢ at org.springframework.session.web.server.session.SpringSessionWebSessionStore$SpringSessionWebSession.save(SpringSessionWebSessionStore.java:166)
	|_                        ⇢ at org.springframework.session.web.server.session.SpringSessionWebSessionStore$SpringSessionWebSession.lambda$changeSessionId$0(SpringSessionWebSessionStore.java:138)
	*______________Mono.defer ⇢ at org.springframework.session.web.server.session.SpringSessionWebSessionStore$SpringSessionWebSession.changeSessionId(SpringSessionWebSessionStore.java:136)
	*____________Mono.flatMap ⇢ at org.springframework.security.web.server.context.WebSessionServerSecurityContextRepository.save(WebSessionServerSecurityContextRepository.java:82)
	|_                        ⇢ at org.springframework.security.web.server.authentication.logout.SecurityContextServerLogoutHandler.logout(SecurityContextServerLogoutHandler.java:40)
	*__________Flux.concatMap ⇢ at org.springframework.security.web.server.authentication.logout.DelegatingServerLogoutHandler.logout(DelegatingServerLogoutHandler.java:53)
	|_              Flux.then ⇢ at org.springframework.security.web.server.authentication.logout.DelegatingServerLogoutHandler.logout(DelegatingServerLogoutHandler.java:54)
	*_______________Mono.then ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.logout(LogoutWebFilter.java:76)
	|_ Mono.subscriberContext ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.logout(LogoutWebFilter.java:77)
	|_                        ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.lambda$filter$2(LogoutWebFilter.java:65)
	*____________Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.logout.LogoutWebFilter.filter(LogoutWebFilter.java:63)
	|_             checkpoint ⇢ org.springframework.security.web.server.authentication.logout.LogoutWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_                        ⇢ at org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter.lambda$filter$1(ServerRequestCacheWebFilter.java:39)
	*____________Mono.flatMap ⇢ at org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter.filter(ServerRequestCacheWebFilter.java:39)
	|_             checkpoint ⇢ org.springframework.security.web.server.savedrequest.ServerRequestCacheWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_                        ⇢ at org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter.filter(SecurityContextServerWebExchangeWebFilter.java:38)
	|_             checkpoint ⇢ org.springframework.security.web.server.context.SecurityContextServerWebExchangeWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	*_______________Mono.then ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:113)
	*______Mono.switchIfEmpty ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:113)
	|_           Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:114)
	|_     Mono.onErrorResume ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:115)
	|_             checkpoint ⇢ org.springframework.security.web.server.authentication.AuthenticationWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	*_______________Mono.then ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:113)
	*______Mono.switchIfEmpty ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:113)
	|_           Mono.flatMap ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:114)
	|_     Mono.onErrorResume ⇢ at org.springframework.security.web.server.authentication.AuthenticationWebFilter.filter(AuthenticationWebFilter.java:115)
	|_             checkpoint ⇢ org.springframework.security.oauth2.client.web.server.authentication.OAuth2LoginAuthenticationWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	*_______________Mono.then ⇢ at org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter.filter(OAuth2AuthorizationRequestRedirectWebFilter.java:132)
	*______Mono.switchIfEmpty ⇢ at org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter.filter(OAuth2AuthorizationRequestRedirectWebFilter.java:132)
	|_     Mono.onErrorResume ⇢ at org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter.filter(OAuth2AuthorizationRequestRedirectWebFilter.java:133)
	|_           Mono.flatMap ⇢ at org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter.filter(OAuth2AuthorizationRequestRedirectWebFilter.java:137)
	|_             checkpoint ⇢ org.springframework.security.oauth2.client.web.server.OAuth2AuthorizationRequestRedirectWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_ Mono.subscriberContext ⇢ at org.springframework.security.web.server.context.ReactorContextWebFilter.filter(ReactorContextWebFilter.java:47)
	|_             checkpoint ⇢ org.springframework.security.web.server.context.ReactorContextWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_                        ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.lambda$continueFilterChain$10(CsrfWebFilter.java:165)
	*______________Mono.defer ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.continueFilterChain(CsrfWebFilter.java:162)
	*_______________Mono.then ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.filter(CsrfWebFilter.java:124)
	*______Mono.switchIfEmpty ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.filter(CsrfWebFilter.java:124)
	|_     Mono.onErrorResume ⇢ at org.springframework.security.web.server.csrf.CsrfWebFilter.filter(CsrfWebFilter.java:125)
	|_             checkpoint ⇢ org.springframework.security.web.server.csrf.CsrfWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_             checkpoint ⇢ org.springframework.web.cors.reactive.CorsWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_                        ⇢ at org.springframework.security.web.server.header.HttpHeaderWriterWebFilter.filter(HttpHeaderWriterWebFilter.java:44)
	|_             checkpoint ⇢ org.springframework.security.web.server.header.HttpHeaderWriterWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_ Mono.subscriberContext ⇢ at org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter.filter(ServerHttpSecurity.java:3239)
	|_             checkpoint ⇢ org.springframework.security.config.web.server.ServerHttpSecurity$ServerWebExchangeReactorContextWebFilter [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_                        ⇢ at org.springframework.web.server.handler.FilteringWebHandler.handle(FilteringWebHandler.java:59)
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
	|_                        ⇢ at org.springframework.security.web.server.WebFilterChainProxy.lambda$filter$4(WebFilterChainProxy.java:56)
	*____________Mono.flatMap ⇢ at org.springframework.security.web.server.WebFilterChainProxy.filter(WebFilterChainProxy.java:56)
	|_             checkpoint ⇢ org.springframework.security.web.server.WebFilterChainProxy [DefaultWebFilterChain]
	|_                        ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.lambda$filter$0(DefaultWebFilterChain.java:120)
	*______________Mono.defer ⇢ at org.springframework.web.server.handler.DefaultWebFilterChain.filter(DefaultWebFilterChain.java:119)
[...]
Original Stack Trace:
		at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:54)
		at org.springframework.data.redis.connection.lettuce.LettuceExceptionConverter.convert(LettuceExceptionConverter.java:41)
		at org.springframework.data.redis.connection.lettuce.LettuceReactiveRedisConnection.lambda$translateException$0(LettuceReactiveRedisConnection.java:293)
		at reactor.core.publisher.Flux.lambda$onErrorMap$28(Flux.java:7070)
		at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onError(FluxOnErrorResume.java:94)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.lambda$onError$1(TracingReactorSubscriber.java:41)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.withActivePath(TracingReactorSubscriber.java:62)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.onError(TracingReactorSubscriber.java:41)
		at reactor.core.publisher.MonoFlatMapMany$FlatMapManyInner.onError(MonoFlatMapMany.java:255)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.lambda$onError$1(TracingReactorSubscriber.java:41)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.withActivePath(TracingReactorSubscriber.java:62)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.onError(TracingReactorSubscriber.java:41)
		at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerError(FluxConcatMap.java:309)
		at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onError(FluxConcatMap.java:875)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.lambda$onError$1(TracingReactorSubscriber.java:41)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.withActivePath(TracingReactorSubscriber.java:62)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.onError(TracingReactorSubscriber.java:41)
		at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onError(FluxHide.java:142)
		at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:142)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.lambda$onError$1(TracingReactorSubscriber.java:41)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.withActivePath(TracingReactorSubscriber.java:62)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.onError(TracingReactorSubscriber.java:41)
		at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onError(FluxHide.java:142)
		at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onError(FluxMapFuseable.java:142)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.lambda$onError$1(TracingReactorSubscriber.java:41)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.withActivePath(TracingReactorSubscriber.java:62)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.onError(TracingReactorSubscriber.java:41)
		at reactor.core.publisher.FluxHide$SuppressFuseableSubscriber.onError(FluxHide.java:142)
		at reactor.core.publisher.MonoFlatMap$FlatMapMain.secondError(MonoFlatMap.java:192)
		at reactor.core.publisher.MonoFlatMap$FlatMapInner.onError(MonoFlatMap.java:259)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.lambda$onError$1(TracingReactorSubscriber.java:41)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.withActivePath(TracingReactorSubscriber.java:62)
		at com.dynatrace.agent.introspection.reactor3.TracingReactorSubscriber.onError(TracingReactorSubscriber.java:41)
		at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
		at reactor.core.publisher.MonoNext$NextSubscriber.onError(MonoNext.java:93)
		at io.lettuce.core.RedisPublisher$ImmediateSubscriber.onError(RedisPublisher.java:891)
		at io.lettuce.core.RedisPublisher$State.onError(RedisPublisher.java:712)
		at io.lettuce.core.RedisPublisher$RedisSubscription.onError(RedisPublisher.java:357)
		at io.lettuce.core.RedisPublisher$SubscriptionCommand.onError(RedisPublisher.java:797)
		at io.lettuce.core.RedisPublisher$SubscriptionCommand.doOnComplete(RedisPublisher.java:757)
		at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:65)
		at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63)
		at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:747)
		at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:682)
		at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
		at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1382)
		at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1245)
Caused by: io.lettuce.core.RedisCommandExecutionException: ERR no such key
	at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Assembly trace from producer [reactor.core.publisher.MonoLift] :
	reactor.core.publisher.Mono.from
	io.lettuce.core.AbstractRedisReactiveCommands.lambda$createMono$60(AbstractRedisReactiveCommands.java:575)
Error has been observed at the following site(s):
	*_________Mono.from ⇢ at io.lettuce.core.AbstractRedisReactiveCommands.lambda$createMono$60(AbstractRedisReactiveCommands.java:575)
	*______Mono.flatMap ⇢ at io.lettuce.core.AbstractRedisReactiveCommands.createMono(AbstractRedisReactiveCommands.java:574)
	|_                  ⇢ at io.lettuce.core.AbstractRedisReactiveCommands.rename(AbstractRedisReactiveCommands.java:1447)
	|_         Mono.map ⇢ at org.springframework.data.redis.connection.lettuce.LettuceReactiveKeyCommands.lambda$null$17(LettuceReactiveKeyCommands.java:179)
	|_         Mono.map ⇢ at org.springframework.data.redis.connection.lettuce.LettuceReactiveKeyCommands.lambda$null$17(LettuceReactiveKeyCommands.java:180)
	*____Flux.concatMap ⇢ at org.springframework.data.redis.connection.lettuce.LettuceReactiveKeyCommands.lambda$rename$18(LettuceReactiveKeyCommands.java:174)
	*__Mono.flatMapMany ⇢ at org.springframework.data.redis.connection.lettuce.LettuceReactiveRedisConnection.execute(LettuceReactiveRedisConnection.java:224)
Original Stack Trace:
		at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)
		at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116)
		at io.lettuce.core.RedisPublisher$SubscriptionCommand.doOnComplete(RedisPublisher.java:757)
		at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:65)
		at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63)
		at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:747)
		at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:682)
		at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:599)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
		at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1382)
		at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1245)
		at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1294)
		at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)
		at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
		at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
		at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
		at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
		at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
		at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
		at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:800)
		at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:499)
		at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:397)
		at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
		at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
		at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
		at java.base/java.lang.Thread.run(Thread.java:833)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants