redis / lettuce

Advanced Java Redis client for thread-safe sync, async, and reactive usage. Supports Cluster, Sentinel, Pipelining, and codecs.
https://lettuce.io
MIT License
5.4k stars 975 forks source link

Commands on newly created connections remain un-flushed #2420

Open mtheos opened 1 year ago

mtheos commented 1 year ago

Feature Request

Is your feature request related to a problem? Please describe

Hi team, I've come across the same problem others have (ex. https://github.com/lettuce-io/lettuce-core/issues/2380) where manual flushing with the cluster client can cause commands not to be flushed, leading to timeouts or hanging futures.

Describe the solution you'd like

If a flush is initiated while a connection is in progress, queue the flush to occur after the pending commands are queued to the connection. As an idea, when new connections are created in the ClusterDistributionChannelWriter, if the future is held in a list, we could queue flushes to occur on these connections after pending commands have been written to them.

Describe alternatives you've considered

I've tried to work around this by listening to connection-activated events or checking that nodes are connected with the partition table, but none of these have been fool-proof and have become quite hacky.

Listening to connection-activated events has been the most reliable but needs a delay since the connection is established before the command is written. Trying to use the partition table has been flaky, I believe (correct me if I'm wrong) because the client can use separate read/write connections so the node could be connected without both connections existing.

Teachability, Documentation, Adoption, Migration Strategy

This is a very rough patch for an example. There are a few problems with it as is.

ClusterDistributionChannelWriter Patch ```patch Subject: [PATCH] Flush connection after queuing --- Index: src/main/java/io/lettuce/core/cluster/ClusterDistributionChannelWriter.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src/main/java/io/lettuce/core/cluster/ClusterDistributionChannelWriter.java b/src/main/java/io/lettuce/core/cluster/ClusterDistributionChannelWriter.java --- a/src/main/java/io/lettuce/core/cluster/ClusterDistributionChannelWriter.java (revision 2ad862f5a1db860d57236c21c473cfd9aefebfea) +++ b/src/main/java/io/lettuce/core/cluster/ClusterDistributionChannelWriter.java (date 1686186198095) @@ -21,6 +21,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -105,6 +106,8 @@ return doWrite(command); } + private final List>> pendingConnections = Collections.synchronizedList(new ArrayList<>()); + private RedisCommand doWrite(RedisCommand command) { if (command instanceof ClusterCommand && !command.isDone()) { @@ -148,7 +151,9 @@ if (isSuccessfullyCompleted(connectFuture)) { writeCommand(command, asking, connectFuture.join(), null); } else { - connectFuture.whenComplete((connection, throwable) -> writeCommand(command, asking, connection, throwable)); + CompletableFuture> writeFuture = connectFuture.whenComplete((connection, throwable) -> writeCommand(command, asking, connection, throwable)); + pendingConnections.add(writeFuture); + writeFuture.whenComplete((ignored1, ignored2) -> pendingConnections.remove(connectFuture)); } return command; @@ -173,8 +178,10 @@ if (isSuccessfullyCompleted(connectFuture)) { writeCommand(commandToSend, false, connectFuture.join(), null); } else { - connectFuture - .whenComplete((connection, throwable) -> writeCommand(commandToSend, false, connection, throwable)); + CompletableFuture> writeFuture = connectFuture.whenComplete((connection, throwable) -> writeCommand(commandToSend, false, connection, throwable)); + pendingConnections.add(writeFuture); + writeFuture.whenComplete((ignored1, ignored2) -> pendingConnections.remove(connectFuture)); + } return commandToSend; @@ -493,6 +500,7 @@ @Override public void flushCommands() { getClusterConnectionProvider().flushCommands(); + pendingConnections.forEach(f -> f.whenComplete((c, t) -> c.flushCommands())); } public ClusterConnectionProvider getClusterConnectionProvider() { ```
mp911de commented 1 year ago

AsyncConnectionProvider does exactly that through the forEach(…) method. The action is either invoked on the actual object or queued through a Future.

If you have a reproducer that we can use for debugging, then happy to look into things.

mtheos commented 1 year ago

Hey Mark, thanks for getting back to me.

I tried making a minimal reproducer for you, but it's not failing as expected. The logs clearly show the connection event after I've flushed, but just like you said the connection is being flushed correctly.

With that knowledge, I'll see if I can figure out what I've done wrong.

I'll close this issue since I think it's a problem on my end.

mtheos commented 1 year ago

Hi Mark (@mp911de), I have a reproducer for the problem.

I believe the problem is that the flush queued by the AsyncConnectionProvider to occur after a connection is established can occur before all the commands are buffered when multiple commands are sent to a node at once.

I've attached the reproducer code below, as well as logs.

I'm testing with a cluster of 6 nodes locally (3M/3R), and it's reproducible most consistently with 6-10 commands sent at once to a node.

Reproducer code ```java import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import io.lettuce.core.RedisURI; import io.lettuce.core.SocketOptions; import io.lettuce.core.TimeoutOptions; import io.lettuce.core.cluster.ClusterClientOptions; import io.lettuce.core.cluster.ClusterTopologyRefreshOptions; import io.lettuce.core.cluster.RedisClusterClient; import io.lettuce.core.codec.StringCodec; import org.slf4j.LoggerFactory; import java.time.Duration; import java.util.ArrayList; import java.util.concurrent.CompletableFuture; public class Main { private static final org.slf4j.Logger logger = LoggerFactory.getLogger(Main.class); private static void configureLogging() { ((Logger) LoggerFactory.getLogger("io.netty")).setLevel(Level.WARN); ((Logger) LoggerFactory.getLogger("io.lettuce.core")).setLevel(Level.WARN); ((Logger) LoggerFactory.getLogger("io.lettuce.core.RedisChannelHandler")).setLevel(Level.ERROR); ((Logger) LoggerFactory.getLogger("io.lettuce.core.cluster.ClusterDistributionChannelWriter")).setLevel(Level.INFO); ((Logger) LoggerFactory.getLogger("io.lettuce.core.protocol.DefaultEndpoint")).setLevel(Level.DEBUG); } public static void main(String[] args) throws InterruptedException { configureLogging(); var uri = RedisURI.create("redis://localhost:7000"); uri.setTimeout(Duration.ofSeconds(2)); var clusterClient = RedisClusterClient.create(uri); var options = ClusterClientOptions.builder() .timeoutOptions(TimeoutOptions.builder().fixedTimeout(Duration.ofSeconds(2)).build()) .socketOptions(SocketOptions.builder().connectTimeout(Duration.ofSeconds(2)).build()) .topologyRefreshOptions(ClusterTopologyRefreshOptions.builder().enableAllAdaptiveRefreshTriggers().build()); clusterClient.setOptions(options.build()); clusterClient.getPartitions(); var i = 0; while (i++ < 10) { logger.info("Run {}", i); Thread.sleep(100); run(clusterClient); } } public static void run(RedisClusterClient clusterClient) { try (var conn = clusterClient.connect(StringCodec.UTF8)) { conn.setAutoFlushCommands(false); var async = conn.async(); var futures = new ArrayList>(); for (int i = 0; i < 5; i++) { futures.add(async.get("hello" + i).toCompletableFuture()); futures.add(async.ttl("hello" + i).toCompletableFuture()); futures.add(async.get("hello" + i).toCompletableFuture()); futures.add(async.ttl("hello" + i).toCompletableFuture()); futures.add(async.get("hello" + i).toCompletableFuture()); futures.add(async.ttl("hello" + i).toCompletableFuture()); futures.add(async.get("hello" + i).toCompletableFuture()); futures.add(async.ttl("hello" + i).toCompletableFuture()); futures.add(async.get("hello" + i).toCompletableFuture()); futures.add(async.ttl("hello" + i).toCompletableFuture()); } conn.flushCommands(); while (!futures.stream().allMatch(CompletableFuture::isDone)); var failed = futures.stream().filter(CompletableFuture::isCompletedExceptionally).count(); var success = futures.size() - failed; logger.info("Success: {} | Failed: {}", success, failed); if (failed > 0) { futures.stream().filter(CompletableFuture::isCompletedExceptionally).findFirst().get().join(); } } } } ```
Logs ``` 19:57:09.337 [main] DEBUG reactor.util.Loggers - Using Slf4j logging framework 19:57:09.586 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.586 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] activating endpoint 19:57:09.586 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] flushCommands() 19:57:09.587 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] flushCommands() Flushing 0 commands 19:57:09.590 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.590 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] write() done 19:57:09.591 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.594 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] write() done 19:57:09.595 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.595 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] write() done 19:57:09.609 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.609 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] activating endpoint 19:57:09.609 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.610 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] activating endpoint 19:57:09.610 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] flushCommands() 19:57:09.609 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] flushCommands() 19:57:09.610 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.610 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] flushCommands() Flushing 0 commands 19:57:09.610 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] activating endpoint 19:57:09.610 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] flushCommands() 19:57:09.610 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] flushCommands() Flushing 0 commands 19:57:09.610 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] flushCommands() Flushing 0 commands 19:57:09.610 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.610 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] activating endpoint 19:57:09.610 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] flushCommands() 19:57:09.610 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] flushCommands() Flushing 0 commands 19:57:09.610 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.610 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.610 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] activating endpoint 19:57:09.610 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] flushCommands() 19:57:09.610 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] flushCommands() Flushing 0 commands 19:57:09.610 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.610 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] write() done 19:57:09.610 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.610 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] activating endpoint 19:57:09.610 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] flushCommands() 19:57:09.610 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] flushCommands() Flushing 0 commands 19:57:09.610 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] write() done 19:57:09.611 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.611 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.611 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.611 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] write() writeAndFlush command AsyncCommand [type=CLIENT, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.611 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] write() done 19:57:09.611 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] write() done 19:57:09.611 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] write() done 19:57:09.611 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] write() done 19:57:09.611 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] write() done 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] write() done 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] write() done 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.612 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] write() writeAndFlush command TimedAsyncCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] write() done 19:57:09.613 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] write() writeAndFlush command TimedAsyncCommand [type=INFO, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command] 19:57:09.614 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] write() done 19:57:09.623 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] closeAsync() 19:57:09.625 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] closeAsync() 19:57:09.625 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] closeAsync() 19:57:09.625 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] closeAsync() 19:57:09.625 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] closeAsync() 19:57:09.625 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] closeAsync() 19:57:09.625 [lettuce-eventExecutorLoop-1-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] closeAsync() 19:57:09.626 [lettuce-nioEventLoop-4-5] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xb125b4f0, /127.0.0.1:64533 -> /127.0.0.1:7003, epid=0x5] deactivating endpoint handler 19:57:09.626 [lettuce-nioEventLoop-4-2] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x89317e8b, /127.0.0.1:64530 -> /127.0.0.1:7000, epid=0x2] deactivating endpoint handler 19:57:09.626 [lettuce-nioEventLoop-4-4] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x39d64a77, /127.0.0.1:64532 -> /127.0.0.1:7002, epid=0x4] deactivating endpoint handler 19:57:09.626 [lettuce-nioEventLoop-4-3] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x1ff08ee1, /127.0.0.1:64531 -> /127.0.0.1:7001, epid=0x3] deactivating endpoint handler 19:57:09.626 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x510f0cb0, /127.0.0.1:64529 -> localhost/127.0.0.1:7000, epid=0x1] deactivating endpoint handler 19:57:09.626 [lettuce-nioEventLoop-4-6] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xf1baeadb, /127.0.0.1:64534 -> /127.0.0.1:7004, epid=0x6] deactivating endpoint handler 19:57:09.627 [main] INFO playground.rediscachebug.Main - Run 1 19:57:09.627 [lettuce-nioEventLoop-4-7] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x906e5f8e, /127.0.0.1:64535 -> /127.0.0.1:7005, epid=0x7] deactivating endpoint handler 19:57:09.760 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.760 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] activating endpoint 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] write() writeAndFlush command ActivationCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.cluster.ClusterCommand] 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] write() done 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] flushCommands() 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] flushCommands() Flushing 0 commands 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] activating endpoint 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() Flushing 0 commands 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() Flushing 13 commands 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] activating endpoint 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() Flushing 0 commands 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] activating endpoint 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() Flushing 0 commands 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelFlush 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() Flushing 6 commands 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelFlush 19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() 19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() Flushing 10 commands 19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelFlush 19:57:11.780 [main] INFO playground.rediscachebug.Main - Success: 29 | Failed: 21 19:57:11.780 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] closeAsync() 19:57:11.780 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] deactivating endpoint handler 19:57:11.781 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] closeAsync() 19:57:11.781 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] closeAsync() 19:57:11.781 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] closeAsync() 19:57:11.782 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] deactivating endpoint handler 19:57:11.782 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] deactivating endpoint handler 19:57:11.782 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] deactivating endpoint handler Exception in thread "main" java.util.concurrent.CompletionException: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) at java.base/java.util.concurrent.CompletableFuture.reportJoin(CompletableFuture.java:413) at java.base/java.util.concurrent.CompletableFuture.join(CompletableFuture.java:2118) at playground.rediscachebug.Main.doThing(Main.java:83) at playground.rediscachebug.Main.main(Main.java:49) Caused by: io.lettuce.core.RedisCommandTimeoutException: Command timed out after 2 second(s) at io.lettuce.core.internal.ExceptionFactory.createTimeoutException(ExceptionFactory.java:59) at io.lettuce.core.protocol.CommandExpiryWriter.lambda$potentiallyExpire$0(CommandExpiryWriter.java:176) at io.netty.util.concurrent.PromiseTask.runTask(PromiseTask.java:98) at io.netty.util.concurrent.ScheduledFutureTask.run(ScheduledFutureTask.java:170) at io.netty.util.concurrent.DefaultEventExecutor.run(DefaultEventExecutor.java:66) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) 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) ```
mtheos commented 1 year ago

I've split the logs by port for you so you can what is buffered and flushed to each node

In this run there were 29 successes and 21 failures

7002 flushed 13 / 30 7003 flushed 10 / 10 7004 flushed 6 / 10

port 7002 ``` 19:57:09.760 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.760 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] activating endpoint 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] write() writeAndFlush command ActivationCommand [type=CLUSTER, output=StatusOutput [output=null, error='null'], commandType=io.lettuce.core.cluster.ClusterCommand] 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] write() done 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] flushCommands() 19:57:09.761 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] flushCommands() Flushing 0 commands 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] activating endpoint 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() 19:57:09.769 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() Flushing 0 commands 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.770 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() 19:57:09.770 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] flushCommands() Flushing 13 commands 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.771 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.772 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.773 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() channelFlush 19:57:09.773 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] write() done 19:57:11.780 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] closeAsync() 19:57:11.780 [lettuce-nioEventLoop-4-8] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x817c1c8a, /127.0.0.1:64536 -> /127.0.0.1:7002, epid=0x8] deactivating endpoint handler 19:57:11.781 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] closeAsync() 19:57:11.782 [lettuce-nioEventLoop-4-9] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x4eb30987, /127.0.0.1:64537 -> /127.0.0.1:7002, epid=0x9] deactivating endpoint handler ```
port 7003 ``` 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] activating endpoint 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() 19:57:09.772 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() Flushing 0 commands 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.773 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.774 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.775 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() done 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] flushCommands() Flushing 10 commands 19:57:09.776 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.777 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.778 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] write() channelFlush 19:57:11.781 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] closeAsync() 19:57:11.782 [lettuce-nioEventLoop-4-1] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0x2adf8e55, /127.0.0.1:64538 -> /127.0.0.1:7003, epid=0xb] deactivating endpoint handler ```
port 7004 ``` 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] activateEndpointAndExecuteBufferedCommands 0 command(s) buffered 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] activating endpoint 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() 19:57:09.772 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() Flushing 0 commands 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.773 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] flushCommands() Flushing 6 commands 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.774 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.774 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelFlush 19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5] 19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done 19:57:11.781 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] closeAsync() 19:57:11.782 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] deactivating endpoint handler ```
mp911de commented 1 year ago

Thanks for the detail. I reopened the ticket and marked it as bug. I'll have a look.

mp911de commented 1 year ago

I tried to reproduce the issue with no luck. I had another look at the code and I noticed that AsyncConnectionProvider.Sync uses a shortcut for running actions. This can introduce non-sequential behavior. Can you try the following:

Replace the two

 if (isComplete()) {
                action.accept(connection);
            } else {
                future.thenAccept(action);
            }

occurrences with future.thenAccept calls and retry your test?

mtheos commented 1 year ago

Hi Mark, I can still see the error with your suggestion, but I think you're right about non-sequential behaviour.

In my tests (and in the logs I gave you), I noticed that it fails when flushCommands() runs on the main thread. If it runs on the event loop, it works as intended.

Can you try to reproduce the error again and see if it succeeds when flushCommands() executes on main?

I believe the error still occurs with future.thenAccept because the command is executed immediately on the calling thread if the future is already completed.

mtheos commented 1 year ago

Also, unrelated, but is there a race condition here with isComplete() 🤔

I believe it's possible for a thread to try to access connection before it's been set.

mp911de commented 1 year ago

DefaultEndpoint.flushCommands() is called on the main thread if the connection is already established.

I'm still not able to reproduce the issue, neither via delaying the connection activation nor delaying the events in the loop.

In any case, I'll apply the change to ensure proper ordering of the actions.

I think that we might have a couple more races here, as some writes are being called after the flush:

19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5]
19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5]
19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelWrite command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5]
19:57:09.775 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=GET, output=ValueOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5]
19:57:09.775 [main] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() channelFlush
19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done
19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] writeToBuffer() buffering command ClusterCommand [command=AsyncCommand [type=TTL, output=IntegerOutput [output=null, error='null'], commandType=io.lettuce.core.protocol.Command], redirections=0, maxRedirections=5]
19:57:09.776 [lettuce-nioEventLoop-4-10] DEBUG i.l.core.protocol.DefaultEndpoint - [channel=0xd5612147, /127.0.0.1:64539 -> /127.0.0.1:7004, epid=0xa] write() done

There's another out of sync access to the connection future when the connection is considered to be established in ClusterDistributionChannelWriter. It plays into the race when we call isSuccessfullyCompleted that we do not consider the remaining queued action on the initial future.

mtheos commented 1 year ago

I'm still not able to reproduce the issue, neither via delaying the connection activation nor delaying the events in the loop.

Interesting 🤔, I have been able to reproduce it on Apple Silicon and Windows.

In any case, I'll apply the change to ensure proper ordering of the actions.

The task runs immediately on the calling thread when a future is already complete. Doesn't that mean the ordering remains the same whether or not you use the future or the connection directly?

AIUI, the execution order of futures changes once the future is complete. If the future is incomplete tasks are queued and execute in reverse, but if it's complete they execute immediately.

Actually, given this, I'm not sure why the flush executes correctly ever 😅

future example ```java var f = new CompletableFuture(); f.whenComplete((x, t) -> System.out.println("A")); f.whenComplete((x, t) -> System.out.println("B")); f.whenComplete((x, t) -> System.out.println("C")); f.complete(null); // C // B // A f.whenComplete((x, t) -> System.out.println("D")); // D f.whenComplete((x, t) -> System.out.println("E")); // E ```
mp911de commented 1 year ago

Well, I was under the impression that all action is queued in order. Apparently, that is not the case and I currently do not have a good idea how to resolve the issue. Maybe we could have our own stack of actions to queue actions and then drain the stack.

mp911de commented 1 year ago

FWIW,

        f.whenComplete((x, t) -> System.out.println("A"))
                .whenComplete((x, t) -> System.out.println("B"))
                .whenComplete((x, t) -> System.out.println("C"));

retains the order.

mtheos commented 1 year ago

Well, I was under the impression that all action is queued in order. Apparently, that is not the case

It's bitten me too. I'm actually surprised this hasn't presented itself as a bigger problem 🤷

I thought the execution order was reversed, but I found this STO post yesterday which shows it's possible to have any order of execution. https://stackoverflow.com/a/65050322

FWIW ...

If the futures are chained the order is retained since each has a queue of 1, but I was under the impression that the buffer and flush commands are all queued on the connection future. f.a; f.b; f.c not f.a.b.c