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

AWS Redis Serverless Issue - won't connect to Spring Connection Factory #3029

Closed
dreamstar-enterprises opened this issue Oct 27, 2024 · 6 comments
Labels
status: invalid An issue that we don't feel is valid

Comments

@dreamstar-enterprises
Copy link

dreamstar-enterprises commented Oct 27, 2024

Hi,

Whether I choose RedisStandalone or RedisClustered in Spring, with AWS Redis Serverless, I keep getting the folllowing errors.

AWS Redis Clustered works just fine, but I'd prefer to use AWS Redis Serverless if I can.

My clustered endpoint looks something like:
clustercfg.elasticache-redis.abcde.nva1.cache.amazonaws.com:6379

My serverless endpoint looks something like:
myapp-redis-serverless-abcde.serverless.nva1.cache.amazonaws.com:6379

Here is my Kotlin code:

/**
 * Establishes a Connection (factory) with Redis
 */
@Configuration
@EnableRedisRepositories(
    enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.OFF,
    keyspaceNotificationsConfigParameter = ""
)
internal class RedisConnectionFactoryConfig(
    private val springDataProperties: SpringDataProperties,
    private val profileProperties: ProfileProperties
) {


    // LETTUCE
    // reactive RedisConnectionFactory for key expiration event handling
    @Component
    internal class ClusterConfigurationProperties(
        springDataProperties: SpringDataProperties
    ) {
        /**
         * Get initial collection of known cluster nodes in format `host:port`.
         * @return
         */
        var nodes = listOf(
            "${springDataProperties.redis.host}:${springDataProperties.redis.port}",
        )
    }

    @Bean
    @Primary
    internal fun reactiveRedisConnectionFactory(
        clusterProperties: ClusterConfigurationProperties,
        springSessionProperties: SpringSessionProperties
    ): ReactiveRedisConnectionFactory {

        // declare the config variable here
        val config: RedisConfiguration

        // determine configuration to use based on the environment
        if (profileProperties.active == ProfileTypes.PRODUCTION.type
            && springSessionProperties.redis?.type == RedisConfigTypes.CLUSTERED.type) {

            // configure Redis Cluster configuration for production
            val clusterConfig = RedisClusterConfiguration(clusterProperties.nodes)
            clusterConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = clusterConfig

        } else {

            // configure Redis Standalone configuration for non-production
            val staticConfig = RedisStandaloneConfiguration()
            staticConfig.hostName = springDataProperties.redis.host
            staticConfig.port = springDataProperties.redis.port

            staticConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = staticConfig

        }

        // create client options

        // create SSL options if SSL is required
        val sslOptions = SslOptions.builder()
            .jdkSslProvider()  // Or use OpenSslProvider if you prefer
            .build()

        // create timeout options
        val timeoutOptions = TimeoutOptions.builder()
            .fixedTimeout(Duration.ofSeconds(20))
            .timeoutCommands(true)
            .build()

        // cluster specific settings for optimal reliability.
        val clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
            .enablePeriodicRefresh(Duration.ofSeconds(5))
            .dynamicRefreshSources(false)
            .closeStaleConnections(true)
            .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(5))
            .enableAllAdaptiveRefreshTriggers().build()

        // create socket options
        val socketOptions = SocketOptions.builder()
            .keepAlive(SocketOptions.DEFAULT_SO_KEEPALIVE)
            .tcpNoDelay(SocketOptions.DEFAULT_SO_NO_DELAY)
            // time to wait for connection to be established, before considering it as a failed connection
            .connectTimeout(Duration.ofSeconds(60))
            .build()

        val mappingFunction: (HostAndPort) -> HostAndPort = { hostAndPort ->
            val host = springDataProperties.redis.host
            val addresses: Array<InetAddress> = try {
                DnsResolvers.JVM_DEFAULT.resolve(host)
            } catch (e: UnknownHostException) {
                e.printStackTrace()
                emptyArray() // Handle error and return an empty array
            }

            val cacheIP = addresses.firstOrNull()?.hostAddress ?: ""
            var finalAddress = hostAndPort

            if (hostAndPort.hostText == cacheIP) {
                finalAddress = HostAndPort.of(host, hostAndPort.port)
            }

            finalAddress
        }

        val resolver = MappingSocketAddressResolver.create(DnsResolvers.JVM_DEFAULT, mappingFunction)

        // customize thread pool size
        val clientResources = DefaultClientResources.builder()
            .ioThreadPoolSize(8)
            .computationThreadPoolSize(8)
            .socketAddressResolver(resolver)
            .build()

        val clusterClientOptionsBuilder = ClusterClientOptions.builder()
            .autoReconnect(true)
            .pingBeforeActivateConnection(true)
            .timeoutOptions(timeoutOptions)
            .socketOptions(socketOptions)
            .topologyRefreshOptions(clusterTopologyRefreshOptions)
            .validateClusterNodeMembership(true)
            .suspendReconnectOnProtocolFailure(true)
            .disconnectedBehavior(DEFAULT_DISCONNECTED_BEHAVIOR)
            .decodeBufferPolicy(DecodeBufferPolicies.ratio(0.5F))
            .requestQueueSize(1000)
            .maxRedirects(DEFAULT_MAX_REDIRECTS)
            .publishOnScheduler(true) //DEFAULT_PUBLISH_ON_SCHEDULER.
            .protocolVersion(ProtocolVersion.RESP3) // Use RESP3 Protocol to ensure AUTH command is used for handshake.

        // conditionally use sslOptions if profileProperties.active is 'prod'
        if (profileProperties.active == ProfileTypes.PRODUCTION.type) {
            clusterClientOptionsBuilder.sslOptions(sslOptions)
        }

        // build the clientClusterOptions configuration
        val clusterClientOptions = clusterClientOptionsBuilder.build()

        // configure connection pool settings
        fun buildLettucePoolConfig(): GenericObjectPoolConfig<Any> {
            val poolConfig = GenericObjectPoolConfig<Any>()
            poolConfig.maxTotal = 100
            poolConfig.maxIdle = 50
            poolConfig.minIdle = 10
            poolConfig.setMaxWait(Duration.ofSeconds(120))
            poolConfig.timeBetweenEvictionRuns = Duration.ofSeconds(120)
            poolConfig.minEvictableIdleTime = Duration.ofMinutes(5)
            poolConfig.testOnBorrow = true
            poolConfig.testWhileIdle = true
            poolConfig.testOnReturn = true
            poolConfig.blockWhenExhausted = true
            poolConfig.lifo = true
            return poolConfig
        }

        // create Lettuce client configuration with authentication details
        val clientConfigBuilder = LettucePoolingClientConfiguration.builder()
            .readFrom(REPLICA_PREFERRED)
            // maximum time allowed for a Redis command to execute before the operation is considered timed out.
            .commandTimeout(Duration.ofSeconds(60))
            .clientResources(clientResources)
            .clientOptions(clusterClientOptions)
            .poolConfig(buildLettucePoolConfig())

        // conditionally enable SSL only if profileProperties.active is 'prod'
        if (profileProperties.active == ProfileTypes.PRODUCTION.type) {
            clientConfigBuilder.useSsl()
        }

        // build the clientConfig configuration
        val clientConfig = clientConfigBuilder.build()

        // create Lettuce connection factory
        return LettuceConnectionFactory(config, clientConfig).apply {
            afterPropertiesSet()
            validateConnection = false
            setShareNativeConnection(true)
        }
    }
}

AWS Redis Serverless - Standalone error

27 October 2024 at 16:09 (UTC) | 2024-10-27T16:09:46.735Z ERROR 1 --- [BFFApplication]   [xecutorLoop-3-8] r.n.http.server.HttpServerOperations : [b36e09e7-1,   L:/10.0.140.207:9090 - R:/10.0.7.19:14384] Error starting response. Replying   error status | b3feec4f34f2464a94e94eea1be944ed | bff
-- | -- | -- | --
27 October 2024 at 16:09 (UTC) | io.lettuce.core.RedisCommandExecutionException: ERR MOVED   4562   df-elasticache-redis-serverless-meqgvn.serverless.euw2.cache.amazonaws.com:6379 | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.lettuce.core.RedisPublisher$SubscriptionCommand.doOnComplete(RedisPublisher.java:761)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:65)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1473)   ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1336)   ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1385)   ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)   ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)   ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)   ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)   ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501)   ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399)   ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994)   ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)   ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at   io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)   ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC) | at java.base/java.lang.Thread.run(Thread.java:831)   ~[na:na] | b3feec4f34f2464a94e94eea1be944ed | bff
27 October 2024 at 16:09 (UTC)	2024-10-27T16:09:46.735Z ERROR 1 --- [BFFApplication] [xecutorLoop-3-8] r.n.http.server.HttpServerOperations : [b36e09e7-1, L:/10.0.140.207:9090 - R:/10.0.7.19:14384] Error starting response. Replying error status	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	io.lettuce.core.RedisCommandExecutionException: ERR MOVED 4562 df-elasticache-redis-serverless-meqgvn.serverless.euw2.cache.amazonaws.com:6379	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.RedisPublisher$SubscriptionCommand.doOnComplete(RedisPublisher.java:761) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:65) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1473) ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1336) ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1385) ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530) ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469) ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799) ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501) ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399) ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff
27 October 2024 at 16:09 (UTC)	at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]	[b3feec4f34f2464a94e94eea1be944ed](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/b3feec4f34f2464a94e94eea1be944ed?region=eu-west-2)
bff

AWS Redis Serverless - Clustered error


27 October 2024 at 16:17 (UTC) | 2024-10-27T16:17:56.574Z ERROR 1 --- [BFFApplication]   [xecutorLoop-3-8] r.n.http.server.HttpServerOperations : [a03dee6b-1,   L:/10.0.138.106:9090 - R:/10.0.29.116:33758] Error starting response.   Replying error status | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
-- | -- | -- | --
27 October 2024 at 16:17 (UTC) | io.lettuce.core.RedisCommandExecutionException: ERR MOVED   2021   df-elasticache-redis-serverless-meqgvn.serverless.euw2.cache.amazonaws.com:6379 | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.RedisPublisher$SubscriptionCommand.doOnComplete(RedisPublisher.java:761)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:65)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597)   ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1473)   ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1336)   ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1385)   ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530)   ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469)   ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)   ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)   ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799)   ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501)   ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399)   ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994)   ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at   io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)   ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)   ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC) | at java.base/java.lang.Thread.run(Thread.java:831)   ~[na:na] | 17fcf56600bf48d48d3a2e199d6adaa9 | bff
27 October 2024 at 16:17 (UTC)	2024-10-27T16:17:56.574Z ERROR 1 --- [BFFApplication] [xecutorLoop-3-8] r.n.http.server.HttpServerOperations : [a03dee6b-1, L:/10.0.138.106:9090 - R:/10.0.29.116:33758] Error starting response. Replying error status	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	io.lettuce.core.RedisCommandExecutionException: ERR MOVED 2021 df-elasticache-redis-serverless-meqgvn.serverless.euw2.cache.amazonaws.com:6379	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:147) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.internal.ExceptionFactory.createExecutionException(ExceptionFactory.java:116) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.RedisPublisher$SubscriptionCommand.doOnComplete(RedisPublisher.java:761) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:65) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:63) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:745) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:680) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:597) ~[lettuce-core-6.3.2.RELEASE.jar!/:6.3.2.RELEASE/8941aea]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1473) ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1336) ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1385) ~[netty-handler-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:530) ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:469) ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290) ~[netty-codec-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1407) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918) ~[netty-transport-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:799) ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:501) ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:399) ~[netty-transport-classes-epoll-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.112.Final.jar!/:4.1.112.Final]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
27 October 2024 at 16:17 (UTC)	at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]	[17fcf56600bf48d48d3a2e199d6adaa9](https://eu-west-2.console.aws.amazon.com/ecs/v2/clusters/DreamstarFrontiersCluster/services/DreamstarFrontiersService/tasks/17fcf56600bf48d48d3a2e199d6adaa9?region=eu-west-2)
bff
@spring-projects-issues spring-projects-issues added the status: waiting-for-triage An issue we've not yet triaged label Oct 27, 2024
@dreamstar-enterprises dreamstar-enterprises changed the title AWS Serverless Issue - won't connect to Spring Connection Factory AWS Redis Serverless Issue - won't connect to Spring Connection Factory Oct 27, 2024
@mp911de
Copy link
Member

mp911de commented Oct 28, 2024

ERR MOVED indicates that the server is running Redis Cluster issuing a redirect. There's a wall of code that also makes use of Redis Cluster, however the stack trace indicates that it isn't using ClusterCommand so I assume this is a configuration issue on your side.

@mp911de mp911de added status: invalid An issue that we don't feel is valid and removed status: waiting-for-triage An issue we've not yet triaged labels Oct 28, 2024
@mp911de mp911de closed this as not planned Won't fix, can't repro, duplicate, stale Oct 28, 2024
@dreamstar-enterprises
Copy link
Author

dreamstar-enterprises commented Oct 28, 2024

Hi Mark,

For AWS Serverless, do i need to use RedisStandAlone or RedisCluster?

So, this block

     // configure Redis Cluster configuration for production
            val clusterConfig = RedisClusterConfiguration(clusterProperties.nodes)
            clusterConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = clusterConfig

or

this block

// configure Redis Standalone configuration for non-production

            val staticConfig = RedisStandaloneConfiguration()
            staticConfig.hostName = springDataProperties.redis.host
            staticConfig.port = springDataProperties.redis.port

            staticConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = staticConfig

@mp911de
Copy link
Member

mp911de commented Oct 28, 2024

I don't know and even after an extensive search, I'm not able to find that out. Looking at the exception, I think it is Redis Cluster.

@dreamstar-enterprises
Copy link
Author

dreamstar-enterprises commented Oct 28, 2024

Hmm, that is strange. It should be documented somewhere. I know AWS Serverless is growing in popularity.

Ok, i will try both again tonight. I think yesterday I was just using Spring RedisStandalone. I will use SpringRedisCluster to see if it works (i.e. to ensure I don't get a PubSub error, if with the Spring annotation that should be turning PubSub off)

Maybe I need to use SpringRedisMasterSlave (though I doubt it)

@dreamstar-enterprises
Copy link
Author

dreamstar-enterprises commented Oct 28, 2024

Hi Mark,

Touchwood, I can confirm that the below works for me for AWS Redis Serverless:

Cluster to Serverless

All I did was change the springDataProperties.redis.host from
clustercfg.elasticache-redis.abcde.nva1.cache.amazonaws.com to
myapp-redis-serverless-abcde.serverless.nva1.cache.amazonaws.com
in my ClusterConfigurationProperties bean below

Also,
profileProperties.active was set to "prod" (i.e.ProfileTypes.PRODUCTION.type)
springSessionProperties.redis?.type was set to "clustered" (i.e. RedisConfigTypes.CLUSTERED.type)

So, it follows this configuration chain:

            // configure Redis Cluster configuration for production
            val clusterConfig = RedisClusterConfiguration(clusterProperties.nodes)
            clusterConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = clusterConfig

PubSub Errors

If I see any pubsub errors (since AWS Serverless does not support them, I will let you know), but I shouldn't since I have this annotation. But 10 mins in, no pubsub errors

@EnableRedisRepositories(
    enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.OFF,
    keyspaceNotificationsConfigParameter = ""
)

Full Spring Redis Connection Factory Code:

/**
 * Establishes a Connection (factory) with Redis
 */
@Configuration
@EnableRedisRepositories(
    enableKeyspaceEvents = RedisKeyValueAdapter.EnableKeyspaceEvents.OFF,
    keyspaceNotificationsConfigParameter = ""
)
internal class RedisConnectionFactoryConfig(
    private val springDataProperties: SpringDataProperties,
    private val profileProperties: ProfileProperties
) {


    // LETTUCE
    // reactive RedisConnectionFactory for key expiration event handling
    @Component
    internal class ClusterConfigurationProperties(
        springDataProperties: SpringDataProperties
    ) {
        /**
         * Get initial collection of known cluster nodes in format `host:port`.
         * @return
         */
        var nodes = listOf(
            "${springDataProperties.redis.host}:${springDataProperties.redis.port}",
        )
    }

    @Bean
    @Primary
    internal fun reactiveRedisConnectionFactory(
        clusterProperties: ClusterConfigurationProperties,
        springSessionProperties: SpringSessionProperties
    ): ReactiveRedisConnectionFactory {

        // declare the config variable here
        val config: RedisConfiguration

        // determine configuration to use based on the environment
        if (profileProperties.active == ProfileTypes.PRODUCTION.type
            && springSessionProperties.redis?.type == RedisConfigTypes.CLUSTERED.type) {

            // configure Redis Cluster configuration for production
            val clusterConfig = RedisClusterConfiguration(clusterProperties.nodes)
            clusterConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = clusterConfig

        } else {

            // configure Redis Standalone configuration for non-production
            val staticConfig = RedisStandaloneConfiguration()
            staticConfig.hostName = springDataProperties.redis.host
            staticConfig.port = springDataProperties.redis.port

            staticConfig.setPassword(RedisPassword.of(springDataProperties.redis.password))
            config = staticConfig

        }

        // create client options

        // create SSL options if SSL is required
        val sslOptions = SslOptions.builder()
            .jdkSslProvider()  // Or use OpenSslProvider if you prefer
            .build()

        // create timeout options
        val timeoutOptions = TimeoutOptions.builder()
            .fixedTimeout(Duration.ofSeconds(20))
            .timeoutCommands(true)
            .build()

        // cluster specific settings for optimal reliability.
        val clusterTopologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
            .enablePeriodicRefresh(Duration.ofSeconds(5))
            .dynamicRefreshSources(false)
            .closeStaleConnections(true)
            .adaptiveRefreshTriggersTimeout(Duration.ofSeconds(5))
            .enableAllAdaptiveRefreshTriggers().build()

        // create socket options
        val socketOptions = SocketOptions.builder()
            .keepAlive(SocketOptions.DEFAULT_SO_KEEPALIVE)
            .tcpNoDelay(SocketOptions.DEFAULT_SO_NO_DELAY)
            // time to wait for connection to be established, before considering it as a failed connection
            .connectTimeout(Duration.ofSeconds(60))
            .build()

        val mappingFunction: (HostAndPort) -> HostAndPort = { hostAndPort ->
            val host = springDataProperties.redis.host
            val addresses: Array<InetAddress> = try {
                DnsResolvers.JVM_DEFAULT.resolve(host)
            } catch (e: UnknownHostException) {
                e.printStackTrace()
                emptyArray() // Handle error and return an empty array
            }

            val cacheIP = addresses.firstOrNull()?.hostAddress ?: ""
            var finalAddress = hostAndPort

            if (hostAndPort.hostText == cacheIP) {
                finalAddress = HostAndPort.of(host, hostAndPort.port)
            }

            finalAddress
        }

        val resolver = MappingSocketAddressResolver.create(DnsResolvers.JVM_DEFAULT, mappingFunction)

        // customize thread pool size
        val clientResources = DefaultClientResources.builder()
            .ioThreadPoolSize(8)
            .computationThreadPoolSize(8)
            .socketAddressResolver(resolver)
            .build()

        val clusterClientOptionsBuilder = ClusterClientOptions.builder()
            .autoReconnect(true)
            .pingBeforeActivateConnection(true)
            .timeoutOptions(timeoutOptions)
            .socketOptions(socketOptions)
            .topologyRefreshOptions(clusterTopologyRefreshOptions)
            .validateClusterNodeMembership(true)
            .suspendReconnectOnProtocolFailure(true)
            .disconnectedBehavior(DEFAULT_DISCONNECTED_BEHAVIOR)
            .decodeBufferPolicy(DecodeBufferPolicies.ratio(0.5F))
            .requestQueueSize(1000)
            .maxRedirects(DEFAULT_MAX_REDIRECTS)
            .publishOnScheduler(true) //DEFAULT_PUBLISH_ON_SCHEDULER.
            .protocolVersion(ProtocolVersion.RESP3) // Use RESP3 Protocol to ensure AUTH command is used for handshake.

        // conditionally use sslOptions if profileProperties.active is 'prod'
        if (profileProperties.active == ProfileTypes.PRODUCTION.type) {
            clusterClientOptionsBuilder.sslOptions(sslOptions)
        }

        // build the clientClusterOptions configuration
        val clusterClientOptions = clusterClientOptionsBuilder.build()

        // configure connection pool settings
        fun buildLettucePoolConfig(): GenericObjectPoolConfig<Any> {
            val poolConfig = GenericObjectPoolConfig<Any>()
            poolConfig.maxTotal = 100
            poolConfig.maxIdle = 50
            poolConfig.minIdle = 10
            poolConfig.setMaxWait(Duration.ofSeconds(120))
            poolConfig.timeBetweenEvictionRuns = Duration.ofSeconds(120)
            poolConfig.minEvictableIdleTime = Duration.ofMinutes(5)
            poolConfig.testOnBorrow = true
            poolConfig.testWhileIdle = true
            poolConfig.testOnReturn = true
            poolConfig.blockWhenExhausted = true
            poolConfig.lifo = true
            return poolConfig
        }

        // create Lettuce client configuration with authentication details
        val clientConfigBuilder = LettucePoolingClientConfiguration.builder()
            .readFrom(REPLICA_PREFERRED)
            // maximum time allowed for a Redis command to execute before the operation is considered timed out.
            .commandTimeout(Duration.ofSeconds(60))
            .clientResources(clientResources)
            .clientOptions(clusterClientOptions)
            .poolConfig(buildLettucePoolConfig())

        // conditionally enable SSL only if profileProperties.active is 'prod'
        if (profileProperties.active == ProfileTypes.PRODUCTION.type) {
            clientConfigBuilder.useSsl()
        }

        // build the clientConfig configuration
        val clientConfig = clientConfigBuilder.build()

        // create Lettuce connection factory
        return LettuceConnectionFactory(config, clientConfig).apply {
            afterPropertiesSet()
            validateConnection = false
            setShareNativeConnection(true)
        }
    }
}

@mp911de
Copy link
Member

mp911de commented Oct 28, 2024

Great to hear you were able to solve your issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
status: invalid An issue that we don't feel is valid
Projects
None yet
Development

No branches or pull requests

3 participants