-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Labels
status: invalidAn issue that we don't feel is validAn issue that we don't feel is valid
Description
Bug Report
Hi , this is Hu , I want to report a bug of lettuce . I used lettuce to monitor status of Redis Cluster(like cluster status , masters ,slaves etc) , it usually works well , but it may have data point missing issue suddenly .
Current Behavior
Monitoring Service may not get information of Redis Cluster due to unknown reason.
Stack trace
02 Nov 2020 09:32:53,270 [WARN] e1ee7a7a-f178-4f6a-8825-b4219909cf40 (pool-12-thread-35) io.netty.channel.AbstractChannel: Force-closing a channel whose registration task was not accepted by an event loop: [id: 0xd9ffe45a]
java.util.concurrent.RejectedExecutionException: event executor terminated
at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:926)
at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:353)
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:346)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:828)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:818)
at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:471)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81)
at io.netty.channel.MultithreadEventLoopGroup.register(MultithreadEventLoopGroup.java:86)
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:323)
at io.netty.bootstrap.Bootstrap.doResolveAndConnect(Bootstrap.java:155)
at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:139)
at io.lettuce.core.AbstractRedisClient.initializeChannelAsync0(AbstractRedisClient.java:313)
at io.lettuce.core.AbstractRedisClient.lambda$initializeChannelAsync$0(AbstractRedisClient.java:294)
at reactor.core.publisher.LambdaMonoSubscriber.onNext(LambdaMonoSubscriber.java:168)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:173)
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:845)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:61)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:4105)
at reactor.core.publisher.Mono.subscribeWith(Mono.java:4211)
at reactor.core.publisher.Mono.subscribe(Mono.java:4077)
at reactor.core.publisher.Mono.subscribe(Mono.java:4013)
at reactor.core.publisher.Mono.subscribe(Mono.java:3985)
at io.lettuce.core.AbstractRedisClient.initializeChannelAsync(AbstractRedisClient.java:289)
at io.lettuce.core.RedisClient.connectStatefulAsync(RedisClient.java:294)
at io.lettuce.core.RedisClient.connectStandaloneAsync(RedisClient.java:274)
at io.lettuce.core.RedisClient.connect(RedisClient.java:207)
at io.lettuce.core.RedisClient.connect(RedisClient.java:192)
at com.amazon.redisnanny.provider.LettuceClient.getMonitorParameters(LettuceClient.java:81)
at com.amazon.redisnanny.provider.ReplicationInfoCollector.lambda$getCurrentSnapshot$3(ReplicationInfoCollector.java:90)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:749)
02 Nov 2020 09:32:53,271 [ERROR] e1ee7a7a-f178-4f6a-8825-b4219909cf40 (pool-12-thread-35) io.netty.util.concurrent.DefaultPromise.rejectedExecution: Failed to submit a listener notification task. Event loop shut down?
java.util.concurrent.RejectedExecutionException: event executor terminated
at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:926)
at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:353)
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:346)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:828)
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:818)
at io.netty.util.concurrent.DefaultPromise.safeExecute(DefaultPromise.java:841)
at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:498)
at io.netty.util.concurrent.DefaultPromise.addListener(DefaultPromise.java:183)
at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:95)
at io.netty.channel.DefaultChannelPromise.addListener(DefaultChannelPromise.java:30)
at io.lettuce.core.AbstractRedisClient.initializeChannelAsync0(AbstractRedisClient.java:336)
at io.lettuce.core.AbstractRedisClient.lambda$initializeChannelAsync$0(AbstractRedisClient.java:294)
at reactor.core.publisher.LambdaMonoSubscriber.onNext(LambdaMonoSubscriber.java:168)
at reactor.core.publisher.FluxPeekFuseable$PeekFuseableSubscriber.onNext(FluxPeekFuseable.java:203)
at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:173)
at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:845)
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1637)
at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:61)
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52)
at reactor.core.publisher.Mono.subscribe(Mono.java:4105)
at reactor.core.publisher.Mono.subscribeWith(Mono.java:4211)
at reactor.core.publisher.Mono.subscribe(Mono.java:4077)
at reactor.core.publisher.Mono.subscribe(Mono.java:4013)
at reactor.core.publisher.Mono.subscribe(Mono.java:3985)
at io.lettuce.core.AbstractRedisClient.initializeChannelAsync(AbstractRedisClient.java:289)
at io.lettuce.core.RedisClient.connectStatefulAsync(RedisClient.java:294)
at io.lettuce.core.RedisClient.connectStandaloneAsync(RedisClient.java:274)
at io.lettuce.core.RedisClient.connect(RedisClient.java:207)
at io.lettuce.core.RedisClient.connect(RedisClient.java:192)
at com.amazon.redisnanny.provider.LettuceClient.getMonitorParameters(LettuceClient.java:81)
at com.amazon.redisnanny.provider.ReplicationInfoCollector.lambda$getCurrentSnapshot$3(ReplicationInfoCollector.java:90)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:749)
Thread dump
"RedisConsistencyMonitor-0" #57 prio=5 os_prio=0 tid=0x00007fbcf9996000 nid=0x2bb3 waiting on condition [0x00007fbc5abf0000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x0000000722e02378> (a java.util.concurrent.FutureTask)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
at java.util.concurrent.FutureTask.awaitDone(FutureTask.java:429)
at java.util.concurrent.FutureTask.get(FutureTask.java:191)
at com.amazon.redisnanny.provider.ReplicationInfoCollector.getCurrentSnapshot(ReplicationInfoCollector.java:103)
at com.amazon.redisnanny.provider.ReplicationInfoCollector.getReplicationInfo(ReplicationInfoCollector.java:48)
at com.amazon.redisnanny.admin.RedisConsistencyMonitor.metricsCollect(RedisConsistencyMonitor.java:136)
at com.amazon.redisnanny.admin.RedisConsistencyMonitor$$Lambda$37/756222660.run(Unknown Source)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:749)
Input Code
for (String host : hostNames) {
...
long startCollect = System.currentTimeMillis();
RedisClient client = null;
StatefulRedisConnection<String, String> connection = null;
...
try {
client = RedisProvider.getRedisClient(redisProvider.generateRedisURI(host));
connection = client.connect();
...
} catch (Exception e) {
...
...
} finally {
if (connection != null) {
connection.close();
}
if (client != null) {
client.shutdown();
}
...
}
}
......
lettuce code in RedisClient class
public StatefulRedisConnection<String, String> connect() {
return this.connect(this.newStringStringCodec());
}
Expected behavior/code
should be no issue when connect to Redis Cluster host
Environment
- Lettuce version(s): 5.3.1.RELEASE
- Redis version: 5.0.4
Possible Solution
We do not find the root cause of this issue ,so that we do not know how to reslove it.
Additional context
We can not reproduce it , but it happens for several times.
Metadata
Metadata
Assignees
Labels
status: invalidAn issue that we don't feel is validAn issue that we don't feel is valid